| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ | 5 #ifndef CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ |
| 6 #define CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ | 6 #define CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 } | 21 } |
| 22 | 22 |
| 23 // Handles blocking content per content settings for each RenderView. | 23 // Handles blocking content per content settings for each RenderView. |
| 24 class ContentSettingsObserver | 24 class ContentSettingsObserver |
| 25 : public content::RenderViewObserver, | 25 : public content::RenderViewObserver, |
| 26 public content::RenderViewObserverTracker<ContentSettingsObserver> { | 26 public content::RenderViewObserverTracker<ContentSettingsObserver> { |
| 27 public: | 27 public: |
| 28 explicit ContentSettingsObserver(content::RenderView* render_view); | 28 explicit ContentSettingsObserver(content::RenderView* render_view); |
| 29 virtual ~ContentSettingsObserver(); | 29 virtual ~ContentSettingsObserver(); |
| 30 | 30 |
| 31 // Sets the content setting rules which back |AllowImage()|, |AllowScript()|, | |
| 32 // and |AllowScriptFromSource()|. |content_setting_rules| must outlive this | |
| 33 // |ContentSettingsObserver|. | |
| 34 void SetContentSettingRules( | |
| 35 const RendererContentSettingRules* content_setting_rules); | |
| 36 | |
| 37 bool IsPluginTemporarilyAllowed(const std::string& identifier); | 31 bool IsPluginTemporarilyAllowed(const std::string& identifier); |
| 38 | 32 |
| 39 // Sends an IPC notification that the specified content type was blocked. | 33 // Sends an IPC notification that the specified content type was blocked. |
| 40 // If the content type requires it, |resource_identifier| names the specific | 34 // If the content type requires it, |resource_identifier| names the specific |
| 41 // resource that was blocked (the plugin path in the case of plugins), | 35 // resource that was blocked (the plugin path in the case of plugins), |
| 42 // otherwise it's the empty string. | 36 // otherwise it's the empty string. |
| 43 void DidBlockContentType(ContentSettingsType settings_type, | 37 void DidBlockContentType(ContentSettingsType settings_type, |
| 44 const std::string& resource_identifier); | 38 const std::string& resource_identifier); |
| 45 | 39 |
| 46 // These correspond to blink::WebPermissionClient methods. | 40 // These correspond to blink::WebPermissionClient methods. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 66 void DidNotAllowMixedScript(); | 60 void DidNotAllowMixedScript(); |
| 67 | 61 |
| 68 // These two methods are not related to content settings, they are used | 62 // These two methods are not related to content settings, they are used |
| 69 // for cases when the NPAPI plugins malfunction if used. | 63 // for cases when the NPAPI plugins malfunction if used. |
| 70 void BlockNPAPIPlugins(); | 64 void BlockNPAPIPlugins(); |
| 71 bool AreNPAPIPluginsBlocked() const; | 65 bool AreNPAPIPluginsBlocked() const; |
| 72 | 66 |
| 73 private: | 67 private: |
| 74 FRIEND_TEST_ALL_PREFIXES(ContentSettingsObserverTest, WhitelistedSchemes); | 68 FRIEND_TEST_ALL_PREFIXES(ContentSettingsObserverTest, WhitelistedSchemes); |
| 75 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, | 69 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 70 ContentSettingsAllowScripts); |
| 71 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 72 JSBlockSentAfterPageLoad); |
| 73 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 74 ImagesBlockedByDefault); |
| 75 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 76 ImagesAllowedByDefault); |
| 77 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 78 ContentSettingsBlockScripts); |
| 79 FRIEND_TEST_ALL_PREFIXES(ChromeRenderViewTest, |
| 76 ContentSettingsInterstitialPages); | 80 ContentSettingsInterstitialPages); |
| 77 | 81 |
| 78 // RenderViewObserver implementation. | 82 // RenderViewObserver implementation. |
| 79 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 83 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 80 virtual void DidCommitProvisionalLoad(blink::WebFrame* frame, | 84 virtual void DidCommitProvisionalLoad(blink::WebFrame* frame, |
| 81 bool is_new_navigation) OVERRIDE; | 85 bool is_new_navigation) OVERRIDE; |
| 82 | 86 |
| 83 // Message handlers. | 87 // Message handlers. |
| 84 void OnLoadBlockedPlugins(const std::string& identifier); | 88 void OnLoadBlockedPlugins(const std::string& identifier); |
| 85 void OnSetAsInterstitial(); | 89 void OnSetAsInterstitial(); |
| 90 void OnSetContentSettingRules(const RendererContentSettingRules& rules); |
| 86 | 91 |
| 87 // Resets the |content_blocked_| array. | 92 // Resets the |content_blocked_| array. |
| 88 void ClearBlockedContentSettings(); | 93 void ClearBlockedContentSettings(); |
| 89 | 94 |
| 90 // Helpers. | 95 // Helpers. |
| 91 // True if |frame| contains content that is white-listed for content settings. | 96 // True if |frame| contains content that is white-listed for content settings. |
| 92 static bool IsWhitelistedForContentSettings(blink::WebFrame* frame); | 97 static bool IsWhitelistedForContentSettings(blink::WebFrame* frame); |
| 93 static bool IsWhitelistedForContentSettings( | 98 static bool IsWhitelistedForContentSettings( |
| 94 const blink::WebSecurityOrigin& origin, | 99 const blink::WebSecurityOrigin& origin, |
| 95 const GURL& document_url); | 100 const GURL& document_url); |
| 96 | 101 |
| 97 // A pointer to content setting rules stored by the renderer. Normally, the | 102 // A pointer to content setting rules stored by the renderer. Normally, the |
| 98 // |RendererContentSettingRules| object is owned by | 103 // |RendererContentSettingRules| object is owned by |
| 99 // |ChromeRenderProcessObserver|. In the tests it is owned by the caller of | 104 // |ChromeRenderProcessObserver|. In the tests it is owned by the caller of |
| 100 // |SetContentSettingRules|. | 105 // |SetContentSettingRules|. |
| 101 const RendererContentSettingRules* content_setting_rules_; | 106 scoped_ptr<RendererContentSettingRules> content_setting_rules_; |
| 102 | 107 |
| 103 // Stores if images, scripts, and plugins have actually been blocked. | 108 // Stores if images, scripts, and plugins have actually been blocked. |
| 104 bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES]; | 109 bool content_blocked_[CONTENT_SETTINGS_NUM_TYPES]; |
| 105 | 110 |
| 106 // Caches the result of AllowStorage. | 111 // Caches the result of AllowStorage. |
| 107 typedef std::pair<GURL, bool> StoragePermissionsKey; | 112 typedef std::pair<GURL, bool> StoragePermissionsKey; |
| 108 std::map<StoragePermissionsKey, bool> cached_storage_permissions_; | 113 std::map<StoragePermissionsKey, bool> cached_storage_permissions_; |
| 109 | 114 |
| 110 // Caches the result of |AllowScript|. | 115 // Caches the result of |AllowScript|. |
| 111 std::map<blink::WebFrame*, bool> cached_script_permissions_; | 116 std::map<blink::WebFrame*, bool> cached_script_permissions_; |
| 112 | 117 |
| 113 std::set<std::string> temporarily_allowed_plugins_; | 118 std::set<std::string> temporarily_allowed_plugins_; |
| 114 bool is_interstitial_page_; | 119 bool is_interstitial_page_; |
| 115 bool npapi_plugins_blocked_; | 120 bool npapi_plugins_blocked_; |
| 116 | 121 |
| 117 DISALLOW_COPY_AND_ASSIGN(ContentSettingsObserver); | 122 DISALLOW_COPY_AND_ASSIGN(ContentSettingsObserver); |
| 118 }; | 123 }; |
| 119 | 124 |
| 120 #endif // CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ | 125 #endif // CHROME_RENDERER_CONTENT_SETTINGS_OBSERVER_H_ |
| OLD | NEW |