blob: b874b4047d5d7064c8c3dbf08a22fffc208b6bae [file] [log] [blame]
// 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)
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)
// 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)
// 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_