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

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

Issue 299753011: Move allocate instance id to chrome/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: refactor one method, Created 6 years, 6 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 "chrome/browser/guest_view/web_view/web_view_guest.h" 5 #include "chrome/browser/guest_view/web_view/web_view_guest.h"
6 6
7 #include "base/debug/stack_trace.h" 7 #include "base/debug/stack_trace.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW: 133 case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW:
134 return webview::kPermissionTypeNewWindow; 134 return webview::kPermissionTypeNewWindow;
135 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: 135 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
136 return webview::kPermissionTypePointerLock; 136 return webview::kPermissionTypePointerLock;
137 default: 137 default:
138 NOTREACHED(); 138 NOTREACHED();
139 return std::string(); 139 return std::string();
140 } 140 }
141 } 141 }
142 142
143 std::string GetStoragePartitionIdFromSiteURL(const GURL& site_url) {
144 const std::string& partition_id = site_url.query();
145 bool persist_storage = site_url.path().find("persist") != std::string::npos;
146
147 printf("site_url: %s\n", site_url.possibly_invalid_spec().c_str());
148 printf("partition would be: %s\n", site_url.query().c_str());
149 printf("extracted: id: %s, persist_storage: %d\n",
150 partition_id.c_str(), persist_storage);
151
152 return (persist_storage ? webview::kPersistPrefix : "") + partition_id;
153 }
154
143 void RemoveWebViewEventListenersOnIOThread( 155 void RemoveWebViewEventListenersOnIOThread(
144 void* profile, 156 void* profile,
145 const std::string& extension_id, 157 const std::string& extension_id,
146 int embedder_process_id, 158 int embedder_process_id,
147 int view_instance_id) { 159 int view_instance_id) {
148 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 160 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
149 ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners( 161 ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners(
150 profile, 162 profile,
151 extension_id, 163 extension_id,
152 embedder_process_id, 164 embedder_process_id,
(...skipping 29 matching lines...) Expand all
182 script_executor_(new extensions::ScriptExecutor(guest_web_contents, 194 script_executor_(new extensions::ScriptExecutor(guest_web_contents,
183 &script_observers_)), 195 &script_observers_)),
184 pending_context_menu_request_id_(0), 196 pending_context_menu_request_id_(0),
185 next_permission_request_id_(0), 197 next_permission_request_id_(0),
186 is_overriding_user_agent_(false), 198 is_overriding_user_agent_(false),
187 pending_reload_on_attachment_(false), 199 pending_reload_on_attachment_(false),
188 main_frame_id_(0), 200 main_frame_id_(0),
189 chromevox_injected_(false), 201 chromevox_injected_(false),
190 find_helper_(this), 202 find_helper_(this),
191 javascript_dialog_helper_(this) { 203 javascript_dialog_helper_(this) {
204 printf("++++ %s\n", __PRETTY_FUNCTION__);
192 notification_registrar_.Add( 205 notification_registrar_.Add(
193 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 206 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
194 content::Source<WebContents>(guest_web_contents)); 207 content::Source<WebContents>(guest_web_contents));
195 208
196 notification_registrar_.Add( 209 notification_registrar_.Add(
197 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, 210 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
198 content::Source<WebContents>(guest_web_contents)); 211 content::Source<WebContents>(guest_web_contents));
199 212
200 #if defined(OS_CHROMEOS) 213 #if defined(OS_CHROMEOS)
201 chromeos::AccessibilityManager* accessibility_manager = 214 chromeos::AccessibilityManager* accessibility_manager =
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 SetUserAgentOverride(""); 343 SetUserAgentOverride("");
331 } 344 }
332 345
333 GuestViewBase::Attach(embedder_web_contents, args); 346 GuestViewBase::Attach(embedder_web_contents, args);
334 347
335 AddWebViewToExtensionRendererState(); 348 AddWebViewToExtensionRendererState();
336 } 349 }
337 350
338 bool WebViewGuest::HandleContextMenu( 351 bool WebViewGuest::HandleContextMenu(
339 const content::ContextMenuParams& params) { 352 const content::ContextMenuParams& params) {
353 printf("++++ %s\n", __PRETTY_FUNCTION__);
340 ContextMenuDelegate* menu_delegate = 354 ContextMenuDelegate* menu_delegate =
341 ContextMenuDelegate::FromWebContents(guest_web_contents()); 355 ContextMenuDelegate::FromWebContents(guest_web_contents());
342 DCHECK(menu_delegate); 356 DCHECK(menu_delegate);
343 357
344 pending_menu_ = menu_delegate->BuildMenu(guest_web_contents(), params); 358 pending_menu_ = menu_delegate->BuildMenu(guest_web_contents(), params);
345 359
346 // Pass it to embedder. 360 // Pass it to embedder.
347 int request_id = ++pending_context_menu_request_id_; 361 int request_id = ++pending_context_menu_request_id_;
348 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 362 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
349 scoped_ptr<base::ListValue> items = 363 scoped_ptr<base::ListValue> items =
(...skipping 17 matching lines...) Expand all
367 args->SetString(webview::kSourceId, source_id); 381 args->SetString(webview::kSourceId, source_id);
368 DispatchEvent( 382 DispatchEvent(
369 new GuestViewBase::Event(webview::kEventConsoleMessage, args.Pass())); 383 new GuestViewBase::Event(webview::kEventConsoleMessage, args.Pass()));
370 } 384 }
371 385
372 void WebViewGuest::Close() { 386 void WebViewGuest::Close() {
373 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 387 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
374 DispatchEvent(new GuestViewBase::Event(webview::kEventClose, args.Pass())); 388 DispatchEvent(new GuestViewBase::Event(webview::kEventClose, args.Pass()));
375 } 389 }
376 390
377 void WebViewGuest::DidAttach() { 391 void WebViewGuest::DidAttach(const base::DictionaryValue& extra_params) {
392 std::string src;
393 if (extra_params.GetString("src", &src) && !src.empty()) {
394 printf("DidAttach, src = %s\n", src.c_str());
395 NavigateGuest(src);
396 } else {
397 printf("DidAttach, no src\n");
398 }
399
378 if (GetOpener()) { 400 if (GetOpener()) {
379 // We need to do a navigation here if the target URL has changed between 401 // We need to do a navigation here if the target URL has changed between
380 // the time the WebContents was created and the time it was attached. 402 // the time the WebContents was created and the time it was attached.
381 // We also need to do an initial navigation if a RenderView was never 403 // We also need to do an initial navigation if a RenderView was never
382 // created for the new window in cases where there is no referrer. 404 // created for the new window in cases where there is no referrer.
383 PendingWindowMap::iterator it = 405 PendingWindowMap::iterator it =
384 GetOpener()->pending_new_windows_.find(this); 406 GetOpener()->pending_new_windows_.find(this);
385 if (it != GetOpener()->pending_new_windows_.end()) { 407 if (it != GetOpener()->pending_new_windows_.end()) {
386 const NewWindowInfo& new_window_info = it->second; 408 const NewWindowInfo& new_window_info = it->second;
387 NavigateGuest(new_window_info.url.spec()); 409 NavigateGuest(new_window_info.url.spec());
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 } 513 }
492 514
493 WebViewGuest* WebViewGuest::CreateNewGuestWindow( 515 WebViewGuest* WebViewGuest::CreateNewGuestWindow(
494 const content::OpenURLParams& params) { 516 const content::OpenURLParams& params) {
495 517
496 GuestViewManager* guest_manager = 518 GuestViewManager* guest_manager =
497 GuestViewManager::FromBrowserContext(browser_context()); 519 GuestViewManager::FromBrowserContext(browser_context());
498 // Allocate a new instance ID for the new guest. 520 // Allocate a new instance ID for the new guest.
499 int instance_id = guest_manager->GetNextInstanceID(); 521 int instance_id = guest_manager->GetNextInstanceID();
500 522
523 // TODO(lazyboy): This codepath doesn't seem to tested by our tests.
Fady Samuel 2014/05/27 14:19:06 This code comes from middle click or ctrl+click. I
lazyboy 2014/05/27 20:43:00 Ya you're right, WebViewInteractiveTest.NewWindow_
501 // Set the attach params to use the same partition as the opener. 524 // Set the attach params to use the same partition as the opener.
502 // We pull the partition information from the site's URL, which is of the 525 // We pull the partition information from the site's URL, which is of the
503 // form guest://site/{persist}?{partition_name}. 526 // form guest://site/{persist}?{partition_name}.
504 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL(); 527 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL();
528 scoped_ptr<base::DictionaryValue> create_params(extra_params()->DeepCopy());
529 const std::string storage_partition_id =
530 GetStoragePartitionIdFromSiteURL(site_url);
531 create_params->SetString(guestview::kStoragePartitionId,
532 storage_partition_id);
505 533
506 scoped_ptr<base::DictionaryValue> create_params(extra_params()->DeepCopy());
507 const std::string& storage_partition_id = site_url.query();
508 bool persist_storage =
509 site_url.path().find("persist") != std::string::npos;
510 WebContents* new_guest_web_contents = 534 WebContents* new_guest_web_contents =
511 guest_manager->CreateGuest(guest_web_contents()->GetSiteInstance(), 535 guest_manager->CreateGuest(guest_web_contents()->GetSiteInstance(),
512 instance_id, 536 instance_id,
513 storage_partition_id,
514 persist_storage,
515 create_params.Pass()); 537 create_params.Pass());
516 WebViewGuest* new_guest = 538 WebViewGuest* new_guest =
517 WebViewGuest::FromWebContents(new_guest_web_contents); 539 WebViewGuest::FromWebContents(new_guest_web_contents);
518 new_guest->SetOpener(this); 540 new_guest->SetOpener(this);
519 541
520 // Take ownership of |new_guest|. 542 // Take ownership of |new_guest|.
521 pending_new_windows_.insert( 543 pending_new_windows_.insert(
522 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); 544 std::make_pair(new_guest, NewWindowInfo(params.url, std::string())));
523 545
524 // Request permission to show the new window. 546 // Request permission to show the new window.
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, 803 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
782 GURL(), 804 GURL(),
783 content::StoragePartition::OriginMatcherFunction(), 805 content::StoragePartition::OriginMatcherFunction(),
784 remove_since, 806 remove_since,
785 base::Time::Now(), 807 base::Time::Now(),
786 callback); 808 callback);
787 return true; 809 return true;
788 } 810 }
789 811
790 WebViewGuest::~WebViewGuest() { 812 WebViewGuest::~WebViewGuest() {
813 printf("++++ %s\n", __PRETTY_FUNCTION__);
791 } 814 }
792 815
793 void WebViewGuest::DidCommitProvisionalLoadForFrame( 816 void WebViewGuest::DidCommitProvisionalLoadForFrame(
794 int64 frame_id, 817 int64 frame_id,
795 const base::string16& frame_unique_name, 818 const base::string16& frame_unique_name,
796 bool is_main_frame, 819 bool is_main_frame,
797 const GURL& url, 820 const GURL& url,
798 content::PageTransition transition_type, 821 content::PageTransition transition_type,
799 content::RenderViewHost* render_view_host) { 822 content::RenderViewHost* render_view_host) {
800 find_helper_.CancelAllFindSessions(); 823 find_helper_.CancelAllFindSessions();
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 : callback(callback), 1251 : callback(callback),
1229 permission_type(permission_type), 1252 permission_type(permission_type),
1230 allowed_by_default(allowed_by_default) { 1253 allowed_by_default(allowed_by_default) {
1231 } 1254 }
1232 1255
1233 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { 1256 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() {
1234 } 1257 }
1235 1258
1236 void WebViewGuest::ShowContextMenu(int request_id, 1259 void WebViewGuest::ShowContextMenu(int request_id,
1237 const MenuItemVector* items) { 1260 const MenuItemVector* items) {
1261 printf("++++ %s\n", __PRETTY_FUNCTION__);
1238 if (!pending_menu_.get()) 1262 if (!pending_menu_.get())
1239 return; 1263 return;
1240 1264
1241 // Make sure this was the correct request. 1265 // Make sure this was the correct request.
1242 if (request_id != pending_context_menu_request_id_) 1266 if (request_id != pending_context_menu_request_id_)
1243 return; 1267 return;
1244 1268
1245 // TODO(lazyboy): Implement. 1269 // TODO(lazyboy): Implement.
1246 DCHECK(!items); 1270 DCHECK(!items);
1247 1271
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 bool user_gesture, 1366 bool user_gesture,
1343 content::WebContents* new_contents) { 1367 content::WebContents* new_contents) {
1344 WebViewGuest* guest = WebViewGuest::FromWebContents(new_contents); 1368 WebViewGuest* guest = WebViewGuest::FromWebContents(new_contents);
1345 if (!guest) 1369 if (!guest)
1346 return; 1370 return;
1347 PendingWindowMap::iterator it = pending_new_windows_.find(guest); 1371 PendingWindowMap::iterator it = pending_new_windows_.find(guest);
1348 if (it == pending_new_windows_.end()) 1372 if (it == pending_new_windows_.end())
1349 return; 1373 return;
1350 const NewWindowInfo& new_window_info = it->second; 1374 const NewWindowInfo& new_window_info = it->second;
1351 1375
1376 printf("Begin RequestNewWindowPermission\n");
1377 printf("Try new contents\n");
1378 // Retrieve the opener partition info if we have it.
1379 const GURL& site_url = new_contents->GetSiteInstance()->GetSiteURL();
1380 std::string storage_partition_id = GetStoragePartitionIdFromSiteURL(site_url);
1381
1352 base::DictionaryValue request_info; 1382 base::DictionaryValue request_info;
1353 request_info.Set(webview::kInitialHeight, 1383 request_info.Set(webview::kInitialHeight,
1354 base::Value::CreateIntegerValue(initial_bounds.height())); 1384 base::Value::CreateIntegerValue(initial_bounds.height()));
1355 request_info.Set(webview::kInitialWidth, 1385 request_info.Set(webview::kInitialWidth,
1356 base::Value::CreateIntegerValue(initial_bounds.width())); 1386 base::Value::CreateIntegerValue(initial_bounds.width()));
1357 request_info.Set(webview::kTargetURL, 1387 request_info.Set(webview::kTargetURL,
1358 base::Value::CreateStringValue(new_window_info.url.spec())); 1388 base::Value::CreateStringValue(new_window_info.url.spec()));
1359 request_info.Set(webview::kName, 1389 request_info.Set(webview::kName,
1360 base::Value::CreateStringValue(new_window_info.name)); 1390 base::Value::CreateStringValue(new_window_info.name));
1361 request_info.Set(webview::kWindowID, 1391 request_info.Set(webview::kWindowID,
1362 base::Value::CreateIntegerValue(guest->guest_instance_id())); 1392 base::Value::CreateIntegerValue(guest->guest_instance_id()));
1393 request_info.Set(guestview::kStoragePartitionId,
1394 base::Value::CreateStringValue(storage_partition_id));
1363 request_info.Set(webview::kWindowOpenDisposition, 1395 request_info.Set(webview::kWindowOpenDisposition,
1364 base::Value::CreateStringValue( 1396 base::Value::CreateStringValue(
1365 WindowOpenDispositionToString(disposition))); 1397 WindowOpenDispositionToString(disposition)));
1366 1398
1367 RequestPermission(WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW, 1399 RequestPermission(WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW,
1368 request_info, 1400 request_info,
1369 base::Bind(&WebViewGuest::OnWebViewNewWindowResponse, 1401 base::Bind(&WebViewGuest::OnWebViewNewWindowResponse,
1370 base::Unretained(this), 1402 base::Unretained(this),
1371 guest->guest_instance_id()), 1403 guest->guest_instance_id()),
1372 false /* allowed_by_default */); 1404 false /* allowed_by_default */);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 bool allow, 1436 bool allow,
1405 const std::string& user_input) { 1437 const std::string& user_input) {
1406 WebViewGuest* guest = 1438 WebViewGuest* guest =
1407 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id); 1439 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id);
1408 if (!guest) 1440 if (!guest)
1409 return; 1441 return;
1410 1442
1411 if (!allow) 1443 if (!allow)
1412 guest->Destroy(); 1444 guest->Destroy();
1413 } 1445 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698