Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(589)

Side by Side Diff: extensions/browser/guest_view/web_view/web_view_guest.cc

Issue 972313002: Make <webview> use out-of-process iframe architecture. (Closed) Base URL: ssh://saopaulo.wat/mnt/dev/shared/src@testoopif2z-better-chrome
Patch Set: Revert unused changes from previous attempt + more cleanup. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 content::Source<WebContents>(web_contents())); 287 content::Source<WebContents>(web_contents()));
288 288
289 if (web_view_guest_delegate_) 289 if (web_view_guest_delegate_)
290 web_view_guest_delegate_->OnDidInitialize(); 290 web_view_guest_delegate_->OnDidInitialize();
291 AttachWebViewHelpers(web_contents()); 291 AttachWebViewHelpers(web_contents());
292 292
293 rules_registry_id_ = GetOrGenerateRulesRegistryID( 293 rules_registry_id_ = GetOrGenerateRulesRegistryID(
294 owner_web_contents()->GetRenderProcessHost()->GetID(), 294 owner_web_contents()->GetRenderProcessHost()->GetID(),
295 view_instance_id()); 295 view_instance_id());
296 296
297 // We must install the mapping from guests to WebViews prior to resuming 297 // NOTE: Calling this prior to attachment breaks OOPIF <webview>.
298 // suspended resource loads so that the WebRequest API will catch resource 298 //// We must install the mapping from guests to WebViews prior to resuming
299 // requests. 299 //// suspended resource loads so that the WebRequest API will catch resource
300 PushWebViewStateToIOThread(); 300 //// requests.
301 //PushWebViewStateToIOThread();
Fady Samuel 2015/03/04 20:44:47 This makes me sad.
lazyboy 2015/04/01 21:47:58 These changes here are temporary, I'll fix these o
301 302
302 ApplyAttributes(create_params); 303 //ApplyAttributes(create_params);
303 } 304 }
304 305
305 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { 306 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) {
306 if (web_view_guest_delegate_) 307 if (web_view_guest_delegate_)
307 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); 308 web_view_guest_delegate_->OnAttachWebViewHelpers(contents);
308 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); 309 web_view_permission_helper_.reset(new WebViewPermissionHelper(this));
309 } 310 }
310 311
311 void WebViewGuest::DidStopLoading() { 312 void WebViewGuest::DidStopLoading() {
312 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 313 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 } 470 }
470 471
471 void WebViewGuest::OnFrameNameChanged(bool is_top_level, 472 void WebViewGuest::OnFrameNameChanged(bool is_top_level,
472 const std::string& name) { 473 const std::string& name) {
473 if (!is_top_level) 474 if (!is_top_level)
474 return; 475 return;
475 476
476 if (name_ == name) 477 if (name_ == name)
477 return; 478 return;
478 479
479 ReportFrameNameChange(name); 480 //ReportFrameNameChange(name);
Fady Samuel 2015/03/04 20:44:47 This makes me sad.
480 } 481 }
481 482
482 void WebViewGuest::CreateNewGuestWebViewWindow( 483 void WebViewGuest::CreateNewGuestWebViewWindow(
483 const content::OpenURLParams& params) { 484 const content::OpenURLParams& params) {
484 GuestViewManager* guest_manager = 485 GuestViewManager* guest_manager =
485 GuestViewManager::FromBrowserContext(browser_context()); 486 GuestViewManager::FromBrowserContext(browser_context());
486 // Set the attach params to use the same partition as the opener. 487 // Set the attach params to use the same partition as the opener.
487 // We pull the partition information from the site's URL, which is of the 488 // We pull the partition information from the site's URL, which is of the
488 // form guest://site/{persist}?{partition_name}. 489 // form guest://site/{persist}?{partition_name}.
489 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); 490 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL();
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 } 854 }
854 855
855 void WebViewGuest::WillAttachToEmbedder() { 856 void WebViewGuest::WillAttachToEmbedder() {
856 rules_registry_id_ = GetOrGenerateRulesRegistryID( 857 rules_registry_id_ = GetOrGenerateRulesRegistryID(
857 owner_web_contents()->GetRenderProcessHost()->GetID(), 858 owner_web_contents()->GetRenderProcessHost()->GetID(),
858 view_instance_id()); 859 view_instance_id());
859 860
860 // We must install the mapping from guests to WebViews prior to resuming 861 // We must install the mapping from guests to WebViews prior to resuming
861 // suspended resource loads so that the WebRequest API will catch resource 862 // suspended resource loads so that the WebRequest API will catch resource
862 // requests. 863 // requests.
863 PushWebViewStateToIOThread(); 864 //PushWebViewStateToIOThread();
Fady Samuel 2015/03/04 20:44:47 This makes me sad.
864 } 865 }
865 866
866 content::JavaScriptDialogManager* WebViewGuest::GetJavaScriptDialogManager( 867 content::JavaScriptDialogManager* WebViewGuest::GetJavaScriptDialogManager(
867 WebContents* source) { 868 WebContents* source) {
868 return &javascript_dialog_helper_; 869 return &javascript_dialog_helper_;
869 } 870 }
870 871
871 void WebViewGuest::NavigateGuest(const std::string& src, 872 void WebViewGuest::NavigateGuest(const std::string& src,
872 bool force_navigation) { 873 bool force_navigation) {
873 if (src.empty()) 874 if (src.empty())
(...skipping 17 matching lines...) Expand all
891 } 892 }
892 if (!force_navigation && (src_ == url)) 893 if (!force_navigation && (src_ == url))
893 return; 894 return;
894 895
895 GURL validated_url(url); 896 GURL validated_url(url);
896 web_contents()->GetRenderProcessHost()->FilterURL(false, &validated_url); 897 web_contents()->GetRenderProcessHost()->FilterURL(false, &validated_url);
897 // As guests do not swap processes on navigation, only navigations to 898 // As guests do not swap processes on navigation, only navigations to
898 // normal web URLs are supported. No protocol handlers are installed for 899 // normal web URLs are supported. No protocol handlers are installed for
899 // other schemes (e.g., WebUI or extensions), and no permissions or bindings 900 // other schemes (e.g., WebUI or extensions), and no permissions or bindings
900 // can be granted to the guest process. 901 // can be granted to the guest process.
902 printf("Calling LoadURLWithParams\n");
901 LoadURLWithParams(validated_url, 903 LoadURLWithParams(validated_url,
902 content::Referrer(), 904 content::Referrer(),
903 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 905 ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
904 web_contents()); 906 web_contents());
905 907
906 src_ = validated_url; 908 src_ = validated_url;
907 } 909 }
908 910
909 bool WebViewGuest::HandleKeyboardShortcuts( 911 bool WebViewGuest::HandleKeyboardShortcuts(
910 const content::NativeWebKeyboardEvent& event) { 912 const content::NativeWebKeyboardEvent& event) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 954
953 void WebViewGuest::ApplyAttributes(const base::DictionaryValue& params) { 955 void WebViewGuest::ApplyAttributes(const base::DictionaryValue& params) {
954 std::string name; 956 std::string name;
955 if (params.GetString(webview::kAttributeName, &name)) { 957 if (params.GetString(webview::kAttributeName, &name)) {
956 // If the guest window's name is empty, then the WebView tag's name is 958 // If the guest window's name is empty, then the WebView tag's name is
957 // assigned. Otherwise, the guest window's name takes precedence over the 959 // assigned. Otherwise, the guest window's name takes precedence over the
958 // WebView tag's name. 960 // WebView tag's name.
959 if (name_.empty()) 961 if (name_.empty())
960 SetName(name); 962 SetName(name);
961 } 963 }
962 if (attached()) 964 //if (attached())
963 ReportFrameNameChange(name_); 965 // ReportFrameNameChange(name_);
964 966
965 std::string user_agent_override; 967 std::string user_agent_override;
966 params.GetString(webview::kParameterUserAgentOverride, &user_agent_override); 968 params.GetString(webview::kParameterUserAgentOverride, &user_agent_override);
967 SetUserAgentOverride(user_agent_override); 969 SetUserAgentOverride(user_agent_override);
968 970
969 bool allow_transparency = false; 971 bool allow_transparency = false;
970 params.GetBoolean(webview::kAttributeAllowTransparency, &allow_transparency); 972 params.GetBoolean(webview::kAttributeAllowTransparency, &allow_transparency);
971 // We need to set the background opaque flag after navigation to ensure that 973 // We need to set the background opaque flag after navigation to ensure that
972 // there is a RenderWidgetHostView available. 974 // there is a RenderWidgetHostView available.
973 SetAllowTransparency(allow_transparency); 975 SetAllowTransparency(allow_transparency);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 } 1118 }
1117 1119
1118 content::WebContents* WebViewGuest::OpenURLFromTab( 1120 content::WebContents* WebViewGuest::OpenURLFromTab(
1119 content::WebContents* source, 1121 content::WebContents* source,
1120 const content::OpenURLParams& params) { 1122 const content::OpenURLParams& params) {
1121 // If the guest wishes to navigate away prior to attachment then we save the 1123 // 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 1124 // navigation to perform upon attachment. Navigation initializes a lot of
1123 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest. 1125 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest.
1124 // Navigation also resumes resource loading which we don't want to allow 1126 // Navigation also resumes resource loading which we don't want to allow
1125 // until attachment. 1127 // until attachment.
1128 // site-per-process
1129 printf("source: [%p], web_contents(): [%p]\n", source, web_contents());
Fady Samuel 2015/03/04 20:44:47 This basically breaks the new window API. Why is t
1130 printf("web_contents(): [%p]\n", web_contents());
1131 //CHECK(0);
1132 content::NavigationController::LoadURLParams load_url_params(
1133 params.url);
1134 load_url_params.referrer = params.referrer;
1135 load_url_params.transition_type = params.transition;
1136 load_url_params.extra_headers = std::string();
1137 //load_url_params.frame_tree_node_id = params.frame_tree_node_id;
1138 load_url_params.transferred_global_request_id =
1139 params.transferred_global_request_id;
1140 source->GetController().LoadURLWithParams(load_url_params);
1141 return source;
1142
1143 // Note: IGNORED.
1126 if (!attached()) { 1144 if (!attached()) {
1127 WebViewGuest* opener = GetOpener(); 1145 WebViewGuest* opener = GetOpener();
1128 auto it = opener->pending_new_windows_.find(this); 1146 auto it = opener->pending_new_windows_.find(this);
1129 if (it == opener->pending_new_windows_.end()) 1147 if (it == opener->pending_new_windows_.end())
1130 return nullptr; 1148 return nullptr;
1131 const NewWindowInfo& info = it->second; 1149 const NewWindowInfo& info = it->second;
1132 NewWindowInfo new_window_info(params.url, info.name); 1150 NewWindowInfo new_window_info(params.url, info.name);
1133 new_window_info.changed = new_window_info.url != info.url; 1151 new_window_info.changed = new_window_info.url != info.url;
1134 it->second = new_window_info; 1152 it->second = new_window_info;
1135 return nullptr; 1153 return nullptr;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), 1250 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(),
1233 new_window_instance_id); 1251 new_window_instance_id);
1234 if (!guest) 1252 if (!guest)
1235 return; 1253 return;
1236 1254
1237 if (!allow) 1255 if (!allow)
1238 guest->Destroy(); 1256 guest->Destroy();
1239 } 1257 }
1240 1258
1241 } // namespace extensions 1259 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698