/chromium-webcl/src/chrome/renderer/content_settings_observer.h
https://bitbucket.org/peixuan/chromium_r197479_base · C Header · 113 lines · 67 code · 22 blank · 24 comment · 0 complexity · 5df3d9d8dce762b9638487ae8c0ebafd MD5 · raw file
- // Copyright (c) 2012 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_CONTENT_SETTINGS_OBSERVER_H_
- #define CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_
- #include <map>
- #include <set>
- #include "chrome/common/content_settings.h"
- #include "content/public/renderer/render_view_observer.h"
- #include "content/public/renderer/render_view_observer_tracker.h"
- class GURL;
- namespace WebKit {
- class WebFrame;
- class WebSecurityOrigin;
- class WebURL;
- }
- // Handles blocking content per content settings for each RenderView.
- class ContentSettingsObserver
- : public content::RenderViewObserver,
- public content::RenderViewObserverTracker<ContentSettingsObserver> {
- public:
- explicit ContentSettingsObserver(content::RenderView* render_view);
- virtual ~ContentSettingsObserver();
- // Sets the content setting rules which back |AllowImage()|, |AllowScript()|,
- // and |AllowScriptFromSource()|. |content_setting_rules| must outlive this
- // |ContentSettingsObserver|.
- void SetContentSettingRules(
- const RendererContentSettingRules* content_setting_rules);
- bool IsPluginTemporarilyAllowed(const std::string& identifier);
- // Sends an IPC notification that the specified content type was blocked.
- // If the content type requires it, |resource_identifier| names the specific
- // resource that was blocked (the plugin path in the case of plugins),
- // otherwise it's the empty string.
- void DidBlockContentType(ContentSettingsType settings_type,
- const std::string& resource_identifier);
- // These correspond to WebKit::WebPermissionClient methods.
- bool AllowDatabase(WebKit::WebFrame* frame,
- const WebKit::WebString& name,
- const WebKit::WebString& display_name,
- unsigned long estimated_size);
- bool AllowFileSystem(WebKit::WebFrame* frame);
- bool AllowImage(WebKit::WebFrame* frame,
- bool enabled_per_settings,
- const WebKit::WebURL& image_url);
- bool AllowIndexedDB(WebKit::WebFrame* frame,
- const WebKit::WebString& name,
- const WebKit::WebSecurityOrigin& origin);
- bool AllowPlugins(WebKit::WebFrame* frame, bool enabled_per_settings);
- bool AllowScript(WebKit::WebFrame* frame, bool enabled_per_settings);
- bool AllowScriptFromSource(WebKit::WebFrame* frame, bool enabled_per_settings,
- const WebKit::WebURL& script_url);
- bool AllowStorage(WebKit::WebFrame* frame, bool local);
- void DidNotAllowPlugins();
- void DidNotAllowScript();
- void DidNotAllowMixedScript();
- private:
- FRIEND_TEST_ALL_PREFIXES(ContentSettingsObserverTest, WhitelistedSchemes);
- FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest,
- ContentSettingsInterstitialPages);
- // RenderViewObserver implementation.
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
- virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
- bool is_new_navigation) OVERRIDE;
- // Message handlers.
- void OnLoadBlockedPlugins(const std::string& identifier);
- void OnSetAsInterstitial();
- // Resets the |content_blocked_| array.
- void ClearBlockedContentSettings();
- // Helpers.
- // True if |frame| contains content that is white-listed for content settings.
- static bool IsWhitelistedForContentSettings(WebKit::WebFrame* frame);
- static bool IsWhitelistedForContentSettings(
- const WebKit::WebSecurityOrigin& origin,
- const GURL& document_url);
- // A pointer to content setting rules stored by the renderer. Normally, the
- // |RendererContentSettingRules| object is owned by
- // |ChromeRenderProcessObserver|. In the tests it is owned by the caller of
- // |SetContentSettingRules|.
- const RendererContentSettingRules* content_setting_rules_;
- // Stores if images, scripts, and plugins have actually been blocked.
- bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES];
- // Caches the result of AllowStorage.
- typedef std::pair<GURL, bool> StoragePermissionsKey;
- std::map<StoragePermissionsKey, bool> cached_storage_permissions_;
- // Caches the result of |AllowScript|.
- std::map<WebKit::WebFrame*, bool> cached_script_permissions_;
- std::set<std::string> temporarily_allowed_plugins_;
- bool is_interstitial_page_;
- DISALLOW_COPY_AND_ASSIGN(ContentSettingsObserver);
- };
- #endif // CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_