| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/common/render_messages.h" | 7 #include "chrome/common/render_messages.h" |
| 8 #include "chrome/common/url_constants.h" | 8 #include "chrome/common/url_constants.h" |
| 9 #include "content/public/renderer/document_state.h" | 9 #include "content/public/renderer/document_state.h" |
| 10 #include "content/public/renderer/navigation_state.h" | 10 #include "content/public/renderer/navigation_state.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 return CONTENT_SETTING_DEFAULT; | 87 return CONTENT_SETTING_DEFAULT; |
| 88 } | 88 } |
| 89 | 89 |
| 90 } // namespace | 90 } // namespace |
| 91 | 91 |
| 92 ContentSettingsObserver::ContentSettingsObserver( | 92 ContentSettingsObserver::ContentSettingsObserver( |
| 93 content::RenderView* render_view) | 93 content::RenderView* render_view) |
| 94 : content::RenderViewObserver(render_view), | 94 : content::RenderViewObserver(render_view), |
| 95 content::RenderViewObserverTracker<ContentSettingsObserver>(render_view), | 95 content::RenderViewObserverTracker<ContentSettingsObserver>(render_view), |
| 96 content_setting_rules_(NULL), | 96 content_setting_rules_(NULL), |
| 97 plugins_temporarily_allowed_(false) { | 97 plugins_temporarily_allowed_(false), |
| 98 all_scripts_allowed_(false) { |
| 98 ClearBlockedContentSettings(); | 99 ClearBlockedContentSettings(); |
| 99 } | 100 } |
| 100 | 101 |
| 101 ContentSettingsObserver::~ContentSettingsObserver() { | 102 ContentSettingsObserver::~ContentSettingsObserver() { |
| 102 } | 103 } |
| 103 | 104 |
| 104 void ContentSettingsObserver::SetContentSettingRules( | 105 void ContentSettingsObserver::SetContentSettingRules( |
| 105 const RendererContentSettingRules* content_setting_rules) { | 106 const RendererContentSettingRules* content_setting_rules) { |
| 106 content_setting_rules_ = content_setting_rules; | 107 content_setting_rules_ = content_setting_rules; |
| 107 } | 108 } |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 return result; | 220 return result; |
| 220 } | 221 } |
| 221 | 222 |
| 222 bool ContentSettingsObserver::AllowPlugins(WebFrame* frame, | 223 bool ContentSettingsObserver::AllowPlugins(WebFrame* frame, |
| 223 bool enabled_per_settings) { | 224 bool enabled_per_settings) { |
| 224 return enabled_per_settings; | 225 return enabled_per_settings; |
| 225 } | 226 } |
| 226 | 227 |
| 227 bool ContentSettingsObserver::AllowScript(WebFrame* frame, | 228 bool ContentSettingsObserver::AllowScript(WebFrame* frame, |
| 228 bool enabled_per_settings) { | 229 bool enabled_per_settings) { |
| 230 if (all_scripts_allowed_) |
| 231 return true; |
| 229 if (!enabled_per_settings) | 232 if (!enabled_per_settings) |
| 230 return false; | 233 return false; |
| 231 | 234 |
| 232 std::map<WebFrame*, bool>::const_iterator it = | 235 std::map<WebFrame*, bool>::const_iterator it = |
| 233 cached_script_permissions_.find(frame); | 236 cached_script_permissions_.find(frame); |
| 234 if (it != cached_script_permissions_.end()) | 237 if (it != cached_script_permissions_.end()) |
| 235 return it->second; | 238 return it->second; |
| 236 | 239 |
| 237 // Evaluate the content setting rules before | 240 // Evaluate the content setting rules before |
| 238 // |IsWhitelistedForContentSettings|; if there is only the default rule | 241 // |IsWhitelistedForContentSettings|; if there is only the default rule |
| 239 // allowing all scripts, it's quicker this way. | 242 // allowing all scripts, it's quicker this way. |
| 240 bool allow = true; | 243 bool allow = true; |
| 241 if (content_setting_rules_) { | 244 if (content_setting_rules_) { |
| 242 ContentSetting setting = GetContentSettingFromRules( | 245 ContentSetting setting = GetContentSettingFromRules( |
| 243 content_setting_rules_->script_rules, | 246 content_setting_rules_->script_rules, |
| 244 frame, | 247 frame, |
| 245 GURL(frame->document().securityOrigin().toString())); | 248 GURL(frame->document().securityOrigin().toString())); |
| 246 allow = setting != CONTENT_SETTING_BLOCK; | 249 allow = setting != CONTENT_SETTING_BLOCK; |
| 247 } | 250 } |
| 248 allow = allow || IsWhitelistedForContentSettings(frame); | 251 allow = allow || IsWhitelistedForContentSettings(frame); |
| 249 | 252 |
| 250 cached_script_permissions_[frame] = allow; | 253 cached_script_permissions_[frame] = allow; |
| 251 return allow; | 254 return allow; |
| 252 } | 255 } |
| 253 | 256 |
| 254 bool ContentSettingsObserver::AllowScriptFromSource( | 257 bool ContentSettingsObserver::AllowScriptFromSource( |
| 255 WebFrame* frame, | 258 WebFrame* frame, |
| 256 bool enabled_per_settings, | 259 bool enabled_per_settings, |
| 257 const WebKit::WebURL& script_url) { | 260 const WebKit::WebURL& script_url) { |
| 261 if (all_scripts_allowed_) |
| 262 return true; |
| 258 if (!enabled_per_settings) | 263 if (!enabled_per_settings) |
| 259 return false; | 264 return false; |
| 260 | 265 |
| 261 bool allow = true; | 266 bool allow = true; |
| 262 if (content_setting_rules_) { | 267 if (content_setting_rules_) { |
| 263 ContentSetting setting = GetContentSettingFromRules( | 268 ContentSetting setting = GetContentSettingFromRules( |
| 264 content_setting_rules_->script_rules, | 269 content_setting_rules_->script_rules, |
| 265 frame, | 270 frame, |
| 266 GURL(script_url)); | 271 GURL(script_url)); |
| 267 allow = setting != CONTENT_SETTING_BLOCK; | 272 allow = setting != CONTENT_SETTING_BLOCK; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 291 } | 296 } |
| 292 | 297 |
| 293 void ContentSettingsObserver::DidNotAllowPlugins(WebFrame* frame) { | 298 void ContentSettingsObserver::DidNotAllowPlugins(WebFrame* frame) { |
| 294 DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); | 299 DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); |
| 295 } | 300 } |
| 296 | 301 |
| 297 void ContentSettingsObserver::DidNotAllowScript(WebFrame* frame) { | 302 void ContentSettingsObserver::DidNotAllowScript(WebFrame* frame) { |
| 298 DidBlockContentType(CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string()); | 303 DidBlockContentType(CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string()); |
| 299 } | 304 } |
| 300 | 305 |
| 306 void ContentSettingsObserver::AllowAllScripts() { |
| 307 all_scripts_allowed_ = true; |
| 308 } |
| 309 |
| 301 void ContentSettingsObserver::OnLoadBlockedPlugins() { | 310 void ContentSettingsObserver::OnLoadBlockedPlugins() { |
| 302 plugins_temporarily_allowed_ = true; | 311 plugins_temporarily_allowed_ = true; |
| 303 } | 312 } |
| 304 | 313 |
| 305 void ContentSettingsObserver::ClearBlockedContentSettings() { | 314 void ContentSettingsObserver::ClearBlockedContentSettings() { |
| 306 for (size_t i = 0; i < arraysize(content_blocked_); ++i) | 315 for (size_t i = 0; i < arraysize(content_blocked_); ++i) |
| 307 content_blocked_[i] = false; | 316 content_blocked_[i] = false; |
| 308 cached_storage_permissions_.clear(); | 317 cached_storage_permissions_.clear(); |
| 309 cached_script_permissions_.clear(); | 318 cached_script_permissions_.clear(); |
| 310 } | 319 } |
| OLD | NEW |