OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/guest_view/web_view/web_view_guest.h" | 5 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/public/browser/browser_context.h" | 10 #include "content/public/browser/browser_context.h" |
(...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1111 *was_blocked = false; | 1111 *was_blocked = false; |
1112 RequestNewWindowPermission(disposition, | 1112 RequestNewWindowPermission(disposition, |
1113 initial_rect, | 1113 initial_rect, |
1114 user_gesture, | 1114 user_gesture, |
1115 new_contents); | 1115 new_contents); |
1116 } | 1116 } |
1117 | 1117 |
1118 content::WebContents* WebViewGuest::OpenURLFromTab( | 1118 content::WebContents* WebViewGuest::OpenURLFromTab( |
1119 content::WebContents* source, | 1119 content::WebContents* source, |
1120 const content::OpenURLParams& params) { | 1120 const content::OpenURLParams& params) { |
1121 // There are two use cases to consider from a security perspective: | |
1122 // 1.) Renderer-initiated nav to chrome:// must always be blocked even if | |
1123 // the <webview> is in WebUI. This is handled by | |
1124 // WebViewGuest::NavigateGuest. | |
Charlie Reis
2015/02/18 22:32:06
nit: It's not obvious how we get to NavigateGuest.
| |
1125 // 2.) The Language Settings context menu item should always work, both in | |
1126 // Chrome Apps and WebUI. This is a browser initiated request and so | |
1127 // we pass it along to the embedder's WebContentsDelegate to get the | |
1128 // browser to perform the action for the <webview>. | |
1129 if (!params.is_renderer_initiated) { | |
1130 if (!owner_web_contents()->GetDelegate()) | |
1131 return nullptr; | |
1132 return owner_web_contents()->GetDelegate()->OpenURLFromTab( | |
1133 owner_web_contents(), params); | |
1134 } | |
1135 | |
1121 // If the guest wishes to navigate away prior to attachment then we save the | 1136 // If the guest wishes to navigate away prior to attachment then we save the |
1122 // navigation to perform upon attachment. Navigation initializes a lot of | 1137 // navigation to perform upon attachment. Navigation initializes a lot of |
1123 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest. | 1138 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest. |
1124 // Navigation also resumes resource loading which we don't want to allow | 1139 // Navigation also resumes resource loading which we don't want to allow |
1125 // until attachment. | 1140 // until attachment. |
1126 if (!attached()) { | 1141 if (!attached()) { |
1127 WebViewGuest* opener = GetOpener(); | 1142 WebViewGuest* opener = GetOpener(); |
1128 auto it = opener->pending_new_windows_.find(this); | 1143 auto it = opener->pending_new_windows_.find(this); |
1129 if (it == opener->pending_new_windows_.end()) | 1144 if (it == opener->pending_new_windows_.end()) |
1130 return nullptr; | 1145 return nullptr; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1232 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), | 1247 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), |
1233 new_window_instance_id); | 1248 new_window_instance_id); |
1234 if (!guest) | 1249 if (!guest) |
1235 return; | 1250 return; |
1236 | 1251 |
1237 if (!allow) | 1252 if (!allow) |
1238 guest->Destroy(); | 1253 guest->Destroy(); |
1239 } | 1254 } |
1240 | 1255 |
1241 } // namespace extensions | 1256 } // namespace extensions |
OLD | NEW |