Index: content/renderer/render_view.cc |
=================================================================== |
--- content/renderer/render_view.cc (revision 81952) |
+++ content/renderer/render_view.cc (working copy) |
@@ -261,29 +261,6 @@ |
result->push_back(urls[i]); |
} |
-// True if |frame| contains content that is white-listed for content settings. |
-static bool IsWhitelistedForContentSettings(WebFrame* frame) { |
- WebSecurityOrigin origin = frame->securityOrigin(); |
- if (origin.isEmpty()) |
- return false; // Uninitialized document? |
- |
- if (EqualsASCII(origin.protocol(), chrome::kChromeUIScheme)) |
- return true; // Browser UI elements should still work. |
- |
- // If the scheme is ftp: or file:, an empty file name indicates a directory |
- // listing, which requires JavaScript to function properly. |
- GURL frame_url = frame->url(); |
- const char* kDirProtocols[] = { "ftp", "file" }; |
- for (size_t i = 0; i < arraysize(kDirProtocols); ++i) { |
- if (EqualsASCII(origin.protocol(), kDirProtocols[i])) { |
- return frame_url.SchemeIs(kDirProtocols[i]) && |
- frame_url.ExtractFileName().empty(); |
- } |
- } |
- |
- return false; |
-} |
- |
static bool WebAccessibilityNotificationToViewHostMsg( |
WebAccessibilityNotification notification, |
ViewHostMsg_AccessibilityNotification_Type::Value* type) { |
@@ -400,9 +377,6 @@ |
accessibility_ack_pending_(false), |
p2p_socket_dispatcher_(NULL), |
session_storage_namespace_id_(session_storage_namespace_id) { |
- |
- ClearBlockedContentSettings(); |
- |
routing_id_ = routing_id; |
if (opener_id != MSG_ROUTING_NONE) |
opener_id_ = opener_id; |
@@ -655,8 +629,6 @@ |
IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding) |
IPC_MESSAGE_HANDLER(ViewMsg_FindReplyACK, OnFindReplyAck) |
IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) |
- IPC_MESSAGE_HANDLER(ViewMsg_SetContentSettingsForLoadingURL, |
- OnSetContentSettingsForLoadingURL) |
IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevel, OnSetZoomLevel) |
IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL, |
OnSetZoomLevelForLoadingURL) |
@@ -971,10 +943,6 @@ |
/////////////////////////////////////////////////////////////////////////////// |
-void RenderView::SetContentSettings(const ContentSettings& settings) { |
- current_content_settings_ = settings; |
-} |
- |
// Tell the embedding application that the URL of the active page has changed |
void RenderView::UpdateURL(WebFrame* frame) { |
WebDataSource* ds = frame->dataSource(); |
@@ -1042,33 +1010,6 @@ |
if (!frame->parent()) { |
// Top-level navigation. |
- |
- // Clear "block" flags for the new page. This needs to happen before any of |
- // allowScripts(), allowImages(), allowPlugins() is called for the new page |
- // so that these functions can correctly detect that a piece of content |
- // flipped from "not blocked" to "blocked". |
- ClearBlockedContentSettings(); |
- |
- // Set content settings. Default them from the parent window if one exists. |
- // This makes sure about:blank windows work as expected. |
- HostContentSettings::iterator host_content_settings = |
- host_content_settings_.find(GURL(request.url())); |
- if (host_content_settings != host_content_settings_.end()) { |
- SetContentSettings(host_content_settings->second); |
- |
- // These content settings were merely recorded transiently for this load. |
- // We can erase them now. If at some point we reload this page, the |
- // browser will send us new, up-to-date content settings. |
- host_content_settings_.erase(host_content_settings); |
- } else if (frame->opener()) { |
- // The opener's view is not guaranteed to be non-null (it could be |
- // detached from its page but not yet destructed). |
- if (WebView* opener_view = frame->opener()->view()) { |
- RenderView* opener = FromWebView(opener_view); |
- SetContentSettings(opener->current_content_settings_); |
- } |
- } |
- |
// Set zoom level, but don't do it for full-page plugin since they don't use |
// the same zoom settings. |
HostZoomLevels::iterator host_zoom = |
@@ -1992,22 +1933,6 @@ |
FOR_EACH_OBSERVER(RenderViewObserver, observers_, FrameWillClose(frame)); |
} |
-bool RenderView::allowImages(WebFrame* frame, bool enabled_per_settings) { |
- if (enabled_per_settings && |
- AllowContentType(CONTENT_SETTINGS_TYPE_IMAGES)) |
- return true; |
- |
- if (IsWhitelistedForContentSettings(frame)) |
- return true; |
- |
- DidBlockContentType(CONTENT_SETTINGS_TYPE_IMAGES, std::string()); |
- return false; // Other protocols fall through here. |
-} |
- |
-bool RenderView::allowPlugins(WebFrame* frame, bool enabled_per_settings) { |
- return WebFrameClient::allowPlugins(frame, enabled_per_settings); |
-} |
- |
void RenderView::loadURLExternally( |
WebFrame* frame, const WebURLRequest& request, |
WebNavigationPolicy policy) { |
@@ -2749,17 +2674,36 @@ |
target)); |
} |
-bool RenderView::allowScript(WebFrame* frame, bool enabled_per_settings) { |
- if (enabled_per_settings && |
- AllowContentType(CONTENT_SETTINGS_TYPE_JAVASCRIPT)) |
- return true; |
+bool RenderView::allowImages(WebFrame* frame, bool enabled_per_settings) { |
+ ObserverListBase<RenderViewObserver>::Iterator it(observers_); |
+ RenderViewObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) |
+ if (!observer->AllowImages(frame, enabled_per_settings)) |
+ return false; |
- if (IsWhitelistedForContentSettings(frame)) |
- return true; |
+ return true; |
+} |
- return false; // Other protocols fall through here. |
+bool RenderView::allowPlugins(WebFrame* frame, bool enabled_per_settings) { |
+ ObserverListBase<RenderViewObserver>::Iterator it(observers_); |
+ RenderViewObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) |
+ if (!observer->AllowPlugins(frame, enabled_per_settings)) |
+ return false; |
+ |
+ return true; |
} |
+bool RenderView::allowScript(WebFrame* frame, bool enabled_per_settings) { |
+ ObserverListBase<RenderViewObserver>::Iterator it(observers_); |
+ RenderViewObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) |
+ if (!observer->AllowScript(frame, enabled_per_settings)) |
+ return false; |
+ |
+ return true; |
+} |
+ |
bool RenderView::allowDatabase( |
WebFrame* frame, const WebString& name, const WebString& display_name, |
unsigned long estimated_size) { |
@@ -2780,11 +2724,11 @@ |
return result; |
} |
void RenderView::didNotAllowScript(WebKit::WebFrame* frame) { |
- DidBlockContentType(CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string()); |
+ FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidNotAllowScript(frame)); |
} |
void RenderView::didNotAllowPlugins(WebKit::WebFrame* frame) { |
- DidBlockContentType(CONTENT_SETTINGS_TYPE_PLUGINS, std::string()); |
+ FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidNotAllowPlugins(frame)); |
} |
void RenderView::didExhaustMemoryAvailableForScript(WebFrame* frame) { |
@@ -3260,26 +3204,6 @@ |
} |
} |
-bool RenderView::AllowContentType(ContentSettingsType settings_type) { |
- // CONTENT_SETTING_ASK is only valid for cookies. |
- return current_content_settings_.settings[settings_type] != |
- CONTENT_SETTING_BLOCK; |
-} |
- |
-void RenderView::DidBlockContentType(ContentSettingsType settings_type, |
- const std::string& resource_identifier) { |
- if (!content_blocked_[settings_type]) { |
- content_blocked_[settings_type] = true; |
- Send(new ViewHostMsg_ContentBlocked(routing_id_, settings_type, |
- resource_identifier)); |
- } |
-} |
- |
-void RenderView::ClearBlockedContentSettings() { |
- for (size_t i = 0; i < arraysize(content_blocked_); ++i) |
- content_blocked_[i] = false; |
-} |
- |
WebPlugin* RenderView::CreatePepperPlugin( |
WebFrame* frame, |
const WebPluginParams& params, |
@@ -3340,12 +3264,6 @@ |
zoomLevelChanged(); |
} |
-void RenderView::OnSetContentSettingsForLoadingURL( |
- const GURL& url, |
- const ContentSettings& content_settings) { |
- host_content_settings_[url] = content_settings; |
-} |
- |
void RenderView::OnSetZoomLevelForLoadingURL(const GURL& url, |
double zoom_level) { |
host_zoom_levels_[url] = zoom_level; |