blob: b56cc2cd8ef96ac0d5b3438cd7eab21af30e2e49 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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 "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);
// content_settings::ContentSettingsAgentImpl::Delegate:
bool IsSchemeWhitelisted(const std::string& scheme) override;
base::Optional<bool> AllowReadFromClipboard() override;
base::Optional<bool> AllowWriteToClipboard() override;
base::Optional<bool> AllowMutationEvents() override;
base::Optional<bool> AllowRunningInsecureContent(
bool allowed_per_settings,
const blink::WebURL& resource_url) override;
void PassiveInsecureContentFound(const blink::WebURL&) override;
private:
FRIEND_TEST_ALL_PREFIXES(ChromeContentSettingsAgentDelegateBrowserTest,
PluginsTemporarilyAllowed);
// RenderFrameObserver:
bool OnMessageReceived(const IPC::Message& message) override;
void DidCommitProvisionalLoad(ui::PageTransition transition) override;
void OnDestruct() override;
void OnLoadBlockedPlugins(const std::string& identifier);
// Whether the observed RenderFrame is for a platform app.
bool IsPlatformApp();
#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.
extensions::Dispatcher* extension_dispatcher_ = nullptr;
#endif
base::flat_set<std::string> temporarily_allowed_plugins_;
content::RenderFrame* render_frame_ = nullptr;
};
#endif // CHROME_RENDERER_CHROME_CONTENT_SETTINGS_AGENT_DELEGATE_H_