1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_RENDERER_CHROME_CONTENT_SETTINGS_AGENT_DELEGATE_H_
#define CHROME_RENDERER_CHROME_CONTENT_SETTINGS_AGENT_DELEGATE_H_
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "components/content_settings/renderer/content_settings_agent_impl.h"
#include "extensions/buildflags/buildflags.h"
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
namespace blink {
class WebSecurityOrigin;
} // namespace blink
namespace extensions {
class Dispatcher;
class Extension;
} // namespace extensions
#endif
class ChromeContentSettingsAgentDelegate
: public content_settings::ContentSettingsAgentImpl::Delegate,
public content::RenderFrameObserver,
public content::RenderFrameObserverTracker<
ChromeContentSettingsAgentDelegate> {
public:
explicit ChromeContentSettingsAgentDelegate(
content::RenderFrame* render_frame);
~ChromeContentSettingsAgentDelegate() override;
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
// Sets the extension dispatcher. Call this right after constructing this
// class. This should only be called once.
void SetExtensionDispatcher(extensions::Dispatcher* extension_dispatcher);
#endif
bool IsPluginTemporarilyAllowed(const std::string& identifier);
void AllowPluginTemporarily(const std::string& identifier);
// content_settings::ContentSettingsAgentImpl::Delegate:
bool IsFrameAllowlistedForStorageAccess(
blink::WebFrame* frame) const override;
bool IsSchemeAllowlisted(const std::string& scheme) override;
bool AllowReadFromClipboard() override;
bool AllowWriteToClipboard() override;
std::optional<bool> AllowMutationEvents() override;
private:
FRIEND_TEST_ALL_PREFIXES(ChromeContentSettingsAgentDelegateBrowserTest,
PluginsTemporarilyAllowed);
// RenderFrameObserver:
void DidCommitProvisionalLoad(ui::PageTransition transition) override;
void OnDestruct() override;
// Whether the observed RenderFrame is for a platform app.
bool IsPlatformApp();
// Whether the observed RenderFrame is an allow-listed System Web App.
bool IsAllowListedSystemWebApp();
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
// If |origin| corresponds to an installed extension, returns that extension.
// Otherwise returns null.
const extensions::Extension* GetExtension(
const blink::WebSecurityOrigin& origin) const;
// Owned by ChromeContentRendererClient and outlive us.
raw_ptr<extensions::Dispatcher> extension_dispatcher_ = nullptr;
#endif
base::flat_set<std::string> temporarily_allowed_plugins_;
raw_ptr<content::RenderFrame> render_frame_ = nullptr;
};
#endif // CHROME_RENDERER_CHROME_CONTENT_SETTINGS_AGENT_DELEGATE_H_
|