| 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 #include "chrome/renderer/content_settings_observer.h" | 5 #include "chrome/renderer/content_settings_observer.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/common/chrome_switches.h" | 8 #include "chrome/common/chrome_switches.h" |
| 9 #include "chrome/common/render_messages.h" | 9 #include "chrome/common/render_messages.h" |
| 10 #include "chrome/common/url_constants.h" | 10 #include "chrome/common/url_constants.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 NOTREACHED(); | 64 NOTREACHED(); |
| 65 return CONTENT_SETTING_DEFAULT; | 65 return CONTENT_SETTING_DEFAULT; |
| 66 } | 66 } |
| 67 | 67 |
| 68 } // namespace | 68 } // namespace |
| 69 | 69 |
| 70 ContentSettingsObserver::ContentSettingsObserver( | 70 ContentSettingsObserver::ContentSettingsObserver( |
| 71 content::RenderView* render_view) | 71 content::RenderView* render_view) |
| 72 : content::RenderViewObserver(render_view), | 72 : content::RenderViewObserver(render_view), |
| 73 content::RenderViewObserverTracker<ContentSettingsObserver>(render_view), | 73 content::RenderViewObserverTracker<ContentSettingsObserver>(render_view), |
| 74 content_setting_rules_(NULL), | |
| 75 is_interstitial_page_(false), | 74 is_interstitial_page_(false), |
| 76 npapi_plugins_blocked_(false) { | 75 npapi_plugins_blocked_(false) { |
| 77 ClearBlockedContentSettings(); | 76 ClearBlockedContentSettings(); |
| 78 } | 77 } |
| 79 | 78 |
| 80 ContentSettingsObserver::~ContentSettingsObserver() { | 79 ContentSettingsObserver::~ContentSettingsObserver() { |
| 81 } | 80 } |
| 82 | 81 |
| 83 void ContentSettingsObserver::SetContentSettingRules( | |
| 84 const RendererContentSettingRules* content_setting_rules) { | |
| 85 content_setting_rules_ = content_setting_rules; | |
| 86 } | |
| 87 | |
| 88 bool ContentSettingsObserver::IsPluginTemporarilyAllowed( | 82 bool ContentSettingsObserver::IsPluginTemporarilyAllowed( |
| 89 const std::string& identifier) { | 83 const std::string& identifier) { |
| 90 // If the empty string is in here, it means all plug-ins are allowed. | 84 // If the empty string is in here, it means all plug-ins are allowed. |
| 91 // TODO(bauerb): Remove this once we only pass in explicit identifiers. | 85 // TODO(bauerb): Remove this once we only pass in explicit identifiers. |
| 92 return (temporarily_allowed_plugins_.find(identifier) != | 86 return (temporarily_allowed_plugins_.find(identifier) != |
| 93 temporarily_allowed_plugins_.end()) || | 87 temporarily_allowed_plugins_.end()) || |
| 94 (temporarily_allowed_plugins_.find(std::string()) != | 88 (temporarily_allowed_plugins_.find(std::string()) != |
| 95 temporarily_allowed_plugins_.end()); | 89 temporarily_allowed_plugins_.end()); |
| 96 } | 90 } |
| 97 | 91 |
| 98 void ContentSettingsObserver::DidBlockContentType( | 92 void ContentSettingsObserver::DidBlockContentType( |
| 99 ContentSettingsType settings_type, | 93 ContentSettingsType settings_type, |
| 100 const std::string& resource_identifier) { | 94 const std::string& resource_identifier) { |
| 101 // Always send a message when |resource_identifier| is not empty, to tell the | 95 // Always send a message when |resource_identifier| is not empty, to tell the |
| 102 // browser which resource was blocked (otherwise the browser will only show | 96 // browser which resource was blocked (otherwise the browser will only show |
| 103 // the first resource to be blocked, and none that are blocked at a later | 97 // the first resource to be blocked, and none that are blocked at a later |
| 104 // time). | 98 // time). |
| 105 if (!content_blocked_[settings_type] || !resource_identifier.empty()) { | 99 if (!content_blocked_[settings_type] || !resource_identifier.empty()) { |
| 106 content_blocked_[settings_type] = true; | 100 content_blocked_[settings_type] = true; |
| 107 Send(new ChromeViewHostMsg_ContentBlocked(routing_id(), settings_type, | 101 Send(new ChromeViewHostMsg_ContentBlocked(routing_id(), settings_type, |
| 108 resource_identifier)); | 102 resource_identifier)); |
| 109 } | 103 } |
| 110 } | 104 } |
| 111 | 105 |
| 112 bool ContentSettingsObserver::OnMessageReceived(const IPC::Message& message) { | 106 bool ContentSettingsObserver::OnMessageReceived(const IPC::Message& message) { |
| 113 bool handled = true; | 107 bool handled = true; |
| 114 IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserver, message) | 108 IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserver, message) |
| 115 IPC_MESSAGE_HANDLER(ChromeViewMsg_SetAsInterstitial, OnSetAsInterstitial) | 109 IPC_MESSAGE_HANDLER(ChromeViewMsg_SetAsInterstitial, OnSetAsInterstitial) |
| 110 IPC_MESSAGE_HANDLER(ChromeViewMsg_SetContentSettingRules, |
| 111 OnSetContentSettingRules) |
| 116 IPC_MESSAGE_UNHANDLED(handled = false) | 112 IPC_MESSAGE_UNHANDLED(handled = false) |
| 117 IPC_END_MESSAGE_MAP() | 113 IPC_END_MESSAGE_MAP() |
| 118 if (handled) | 114 if (handled) |
| 119 return true; | 115 return true; |
| 120 | 116 |
| 121 // Don't swallow LoadBlockedPlugins messages, as they're sent to every | 117 // Don't swallow LoadBlockedPlugins messages, as they're sent to every |
| 122 // blocked plugin. | 118 // blocked plugin. |
| 123 IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserver, message) | 119 IPC_BEGIN_MESSAGE_MAP(ContentSettingsObserver, message) |
| 124 IPC_MESSAGE_HANDLER(ChromeViewMsg_LoadBlockedPlugins, OnLoadBlockedPlugins) | 120 IPC_MESSAGE_HANDLER(ChromeViewMsg_LoadBlockedPlugins, OnLoadBlockedPlugins) |
| 125 IPC_END_MESSAGE_MAP() | 121 IPC_END_MESSAGE_MAP() |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 | 310 |
| 315 void ContentSettingsObserver::OnLoadBlockedPlugins( | 311 void ContentSettingsObserver::OnLoadBlockedPlugins( |
| 316 const std::string& identifier) { | 312 const std::string& identifier) { |
| 317 temporarily_allowed_plugins_.insert(identifier); | 313 temporarily_allowed_plugins_.insert(identifier); |
| 318 } | 314 } |
| 319 | 315 |
| 320 void ContentSettingsObserver::OnSetAsInterstitial() { | 316 void ContentSettingsObserver::OnSetAsInterstitial() { |
| 321 is_interstitial_page_ = true; | 317 is_interstitial_page_ = true; |
| 322 } | 318 } |
| 323 | 319 |
| 320 void ContentSettingsObserver::OnSetContentSettingRules( |
| 321 const RendererContentSettingRules& rules) { |
| 322 if (!content_setting_rules_) |
| 323 content_setting_rules_.reset(new RendererContentSettingRules()); |
| 324 *content_setting_rules_ = rules; |
| 325 } |
| 326 |
| 324 void ContentSettingsObserver::ClearBlockedContentSettings() { | 327 void ContentSettingsObserver::ClearBlockedContentSettings() { |
| 325 for (size_t i = 0; i < arraysize(content_blocked_); ++i) | 328 for (size_t i = 0; i < arraysize(content_blocked_); ++i) |
| 326 content_blocked_[i] = false; | 329 content_blocked_[i] = false; |
| 327 cached_storage_permissions_.clear(); | 330 cached_storage_permissions_.clear(); |
| 328 cached_script_permissions_.clear(); | 331 cached_script_permissions_.clear(); |
| 329 } | 332 } |
| 330 | 333 |
| 331 bool ContentSettingsObserver::IsWhitelistedForContentSettings(WebFrame* frame) { | 334 bool ContentSettingsObserver::IsWhitelistedForContentSettings(WebFrame* frame) { |
| 332 // Whitelist Instant processes. | 335 // Whitelist Instant processes. |
| 333 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInstantProcess)) | 336 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInstantProcess)) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 | 370 |
| 368 // If the scheme is file:, an empty file name indicates a directory listing, | 371 // If the scheme is file:, an empty file name indicates a directory listing, |
| 369 // which requires JavaScript to function properly. | 372 // which requires JavaScript to function properly. |
| 370 if (EqualsASCII(origin.protocol(), chrome::kFileScheme)) { | 373 if (EqualsASCII(origin.protocol(), chrome::kFileScheme)) { |
| 371 return document_url.SchemeIs(chrome::kFileScheme) && | 374 return document_url.SchemeIs(chrome::kFileScheme) && |
| 372 document_url.ExtractFileName().empty(); | 375 document_url.ExtractFileName().empty(); |
| 373 } | 376 } |
| 374 | 377 |
| 375 return false; | 378 return false; |
| 376 } | 379 } |
| OLD | NEW |