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 "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 2354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2365 WebString origin_str = frame->document().securityOrigin().toString(); | 2365 WebString origin_str = frame->document().securityOrigin().toString(); |
2366 GURL frame_url(origin_str.utf8().data()); | 2366 GURL frame_url(origin_str.utf8().data()); |
2367 // TODO(cevans): revisit whether this origin check is still necessary once | 2367 // TODO(cevans): revisit whether this origin check is still necessary once |
2368 // crbug.com/101395 is fixed. | 2368 // crbug.com/101395 is fixed. |
2369 if (frame_url.GetOrigin() != url.GetOrigin()) { | 2369 if (frame_url.GetOrigin() != url.GetOrigin()) { |
2370 OpenURL(frame, url, referrer, default_policy); | 2370 OpenURL(frame, url, referrer, default_policy); |
2371 return WebKit::WebNavigationPolicyIgnore; | 2371 return WebKit::WebNavigationPolicyIgnore; |
2372 } | 2372 } |
2373 } | 2373 } |
2374 | 2374 |
2375 // If the browser is interested, then give it a chance to look at top level | 2375 // If the browser is interested, then give it a chance to look at the request. |
2376 // navigations. | |
2377 if (is_content_initiated) { | 2376 if (is_content_initiated) { |
2378 bool browser_handles_top_level_requests = | 2377 bool browser_handles_request = |
2379 renderer_preferences_.browser_handles_top_level_requests && | 2378 renderer_preferences_.browser_handles_top_level_requests && |
2380 IsNonLocalTopLevelNavigation(url, frame, type); | 2379 IsNonLocalTopLevelNavigation(url, frame, type); |
2381 if (browser_handles_top_level_requests || | 2380 if (!browser_handles_request) { |
2382 renderer_preferences_.browser_handles_all_requests) { | 2381 browser_handles_request = renderer_preferences_. |
2382 browser_handles_all_top_level_or_non_local_requests && | |
2383 IsRemoteOrTopLevelNavigation(url, frame); | |
2384 } | |
2385 | |
2386 if (browser_handles_request) { | |
2383 // Reset these counters as the RenderView could be reused for the next | 2387 // Reset these counters as the RenderView could be reused for the next |
2384 // navigation. | 2388 // navigation. |
2385 page_id_ = -1; | 2389 page_id_ = -1; |
2386 last_page_id_sent_to_browser_ = -1; | 2390 last_page_id_sent_to_browser_ = -1; |
2387 OpenURL(frame, url, referrer, default_policy); | 2391 OpenURL(frame, url, referrer, default_policy); |
2388 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. | 2392 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. |
2389 } | 2393 } |
2390 } | 2394 } |
2391 | 2395 |
2392 // Detect when we're crossing a permission-based boundary (e.g. into or out of | 2396 // Detect when we're crossing a permission-based boundary (e.g. into or out of |
(...skipping 2904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5297 &override_state)) | 5301 &override_state)) |
5298 return override_state; | 5302 return override_state; |
5299 return current_state; | 5303 return current_state; |
5300 } | 5304 } |
5301 | 5305 |
5302 WebKit::WebUserMediaClient* RenderViewImpl::userMediaClient() { | 5306 WebKit::WebUserMediaClient* RenderViewImpl::userMediaClient() { |
5303 EnsureMediaStreamImpl(); | 5307 EnsureMediaStreamImpl(); |
5304 return media_stream_impl_; | 5308 return media_stream_impl_; |
5305 } | 5309 } |
5306 | 5310 |
5311 bool RenderViewImpl::IsRemoteOrTopLevelNavigation( | |
abarth-chromium
2012/05/18 18:34:07
"remote" is sort of a funny term to use here. For
| |
5312 const GURL& url, WebKit::WebFrame* frame) const { | |
5313 if (frame->parent() == NULL) | |
5314 return true; | |
5315 | |
5316 // blob: and data: URLs don't involve remote content either, thus are | |
5317 // considered local. | |
5318 if (url.SchemeIs(chrome::kBlobScheme) || url.SchemeIs(chrome::kDataScheme)) | |
abarth-chromium
2012/05/18 18:34:07
Presumably filesystem is in this category too.
| |
5319 return false; | |
5320 | |
5321 return url.GetOrigin() != | |
5322 GURL(frame->document().securityOrigin().toString().utf8()); | |
5323 } | |
5324 | |
5307 bool RenderViewImpl::IsNonLocalTopLevelNavigation( | 5325 bool RenderViewImpl::IsNonLocalTopLevelNavigation( |
5308 const GURL& url, WebKit::WebFrame* frame, WebKit::WebNavigationType type) { | 5326 const GURL& url, WebKit::WebFrame* frame, WebKit::WebNavigationType type) |
5327 const { | |
5309 // Must be a top level frame. | 5328 // Must be a top level frame. |
5310 if (frame->parent() != NULL) | 5329 if (frame->parent() != NULL) |
5311 return false; | 5330 return false; |
5312 | 5331 |
5313 // Navigations initiated within Webkit are not sent out to the external host | 5332 // Navigations initiated within Webkit are not sent out to the external host |
5314 // in the following cases. | 5333 // in the following cases. |
5315 // 1. The url scheme is not http/https | 5334 // 1. The url scheme is not http/https |
5316 // 2. The origin of the url and the opener is the same in which case the | 5335 // 2. The origin of the url and the opener is the same in which case the |
5317 // opener relationship is maintained. | 5336 // opener relationship is maintained. |
5318 // 3. Reloads/form submits/back forward navigations | 5337 // 3. Reloads/form submits/back forward navigations |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5391 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { | 5410 bool RenderViewImpl::WebWidgetHandlesCompositorScheduling() const { |
5392 return !!RenderThreadImpl::current()->compositor_thread(); | 5411 return !!RenderThreadImpl::current()->compositor_thread(); |
5393 } | 5412 } |
5394 | 5413 |
5395 void RenderViewImpl::OnJavaBridgeInit() { | 5414 void RenderViewImpl::OnJavaBridgeInit() { |
5396 DCHECK(!java_bridge_dispatcher_); | 5415 DCHECK(!java_bridge_dispatcher_); |
5397 #if defined(ENABLE_JAVA_BRIDGE) | 5416 #if defined(ENABLE_JAVA_BRIDGE) |
5398 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this); | 5417 java_bridge_dispatcher_ = new JavaBridgeDispatcher(this); |
5399 #endif | 5418 #endif |
5400 } | 5419 } |
OLD | NEW |