| 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/browser/browser_plugin/browser_plugin_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 instance_id_(instance_id) { | 92 instance_id_(instance_id) { |
| 93 RecordAction( | 93 RecordAction( |
| 94 base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.NewWindow
")); | 94 base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.NewWindow
")); |
| 95 } | 95 } |
| 96 | 96 |
| 97 virtual void RespondImpl(bool should_allow, | 97 virtual void RespondImpl(bool should_allow, |
| 98 const std::string& user_input) OVERRIDE { | 98 const std::string& user_input) OVERRIDE { |
| 99 int embedder_render_process_id = | 99 int embedder_render_process_id = |
| 100 guest_->embedder_web_contents()->GetRenderProcessHost()->GetID(); | 100 guest_->embedder_web_contents()->GetRenderProcessHost()->GetID(); |
| 101 BrowserPluginGuest* guest = | 101 BrowserPluginGuest* guest = |
| 102 guest_->GetWebContents()->GetBrowserPluginGuestManager()-> | 102 BrowserPluginGuestManager::FromBrowserContext( |
| 103 GetGuestByInstanceID(instance_id_, embedder_render_process_id); | 103 guest_->GetWebContents()->GetBrowserContext())-> |
| 104 GetGuestByInstanceID(instance_id_, embedder_render_process_id); |
| 104 if (!guest) { | 105 if (!guest) { |
| 105 VLOG(0) << "Guest not found. Instance ID: " << instance_id_; | 106 VLOG(0) << "Guest not found. Instance ID: " << instance_id_; |
| 106 return; | 107 return; |
| 107 } | 108 } |
| 108 | 109 |
| 109 // If we do not destroy the guest then we allow the new window. | 110 // If we do not destroy the guest then we allow the new window. |
| 110 if (!should_allow) | 111 if (!should_allow) |
| 111 guest->Destroy(); | 112 guest->Destroy(); |
| 112 } | 113 } |
| 113 | 114 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 | 183 |
| 183 private: | 184 private: |
| 184 BrowserPluginGuest* browser_plugin_guest_; | 185 BrowserPluginGuest* browser_plugin_guest_; |
| 185 | 186 |
| 186 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver); | 187 DISALLOW_COPY_AND_ASSIGN(EmbedderWebContentsObserver); |
| 187 }; | 188 }; |
| 188 | 189 |
| 189 BrowserPluginGuest::BrowserPluginGuest( | 190 BrowserPluginGuest::BrowserPluginGuest( |
| 190 int instance_id, | 191 int instance_id, |
| 191 bool has_render_view, | 192 bool has_render_view, |
| 192 WebContentsImpl* web_contents, | 193 WebContentsImpl* web_contents) |
| 193 BrowserPluginGuest* opener) | |
| 194 : WebContentsObserver(web_contents), | 194 : WebContentsObserver(web_contents), |
| 195 embedder_web_contents_(NULL), | 195 embedder_web_contents_(NULL), |
| 196 instance_id_(instance_id), | 196 instance_id_(instance_id), |
| 197 guest_device_scale_factor_(1.0f), | 197 guest_device_scale_factor_(1.0f), |
| 198 guest_hang_timeout_( | 198 guest_hang_timeout_( |
| 199 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), | 199 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), |
| 200 focused_(false), | 200 focused_(false), |
| 201 mouse_locked_(false), | 201 mouse_locked_(false), |
| 202 pending_lock_request_(false), | 202 pending_lock_request_(false), |
| 203 embedder_visible_(true), | 203 embedder_visible_(true), |
| 204 auto_size_enabled_(false), | 204 auto_size_enabled_(false), |
| 205 copy_request_id_(0), | 205 copy_request_id_(0), |
| 206 next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID), | 206 next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID), |
| 207 has_render_view_(has_render_view), | 207 has_render_view_(has_render_view), |
| 208 last_seen_auto_size_enabled_(false), | 208 last_seen_auto_size_enabled_(false), |
| 209 is_in_destruction_(false), | 209 is_in_destruction_(false), |
| 210 last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 210 last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
| 211 last_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT), | 211 last_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT), |
| 212 last_can_compose_inline_(true), | 212 last_can_compose_inline_(true), |
| 213 weak_ptr_factory_(this) { | 213 weak_ptr_factory_(this) { |
| 214 DCHECK(web_contents); | 214 DCHECK(web_contents); |
| 215 web_contents->SetDelegate(this); | 215 web_contents->SetDelegate(this); |
| 216 if (opener) | 216 BrowserPluginGuestManager::FromBrowserContext( |
| 217 opener_ = opener->AsWeakPtr(); | 217 GetWebContents()->GetBrowserContext())->AddGuest(instance_id_, |
| 218 GetWebContents()->GetBrowserPluginGuestManager()->AddGuest(instance_id_, | 218 GetWebContents()); |
| 219 GetWebContents()); | |
| 220 } | 219 } |
| 221 | 220 |
| 222 bool BrowserPluginGuest::AddMessageToConsole(WebContents* source, | 221 bool BrowserPluginGuest::AddMessageToConsole(WebContents* source, |
| 223 int32 level, | 222 int32 level, |
| 224 const base::string16& message, | 223 const base::string16& message, |
| 225 int32 line_no, | 224 int32 line_no, |
| 226 const base::string16& source_id) { | 225 const base::string16& source_id) { |
| 227 if (!delegate_) | 226 if (!delegate_) |
| 228 return false; | 227 return false; |
| 229 | 228 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 base::Bind(&BrowserPluginGuest::RespondToPermissionRequest, | 295 base::Bind(&BrowserPluginGuest::RespondToPermissionRequest, |
| 297 AsWeakPtr(), | 296 AsWeakPtr(), |
| 298 request_id); | 297 request_id); |
| 299 delegate_->RequestPermission( | 298 delegate_->RequestPermission( |
| 300 permission_type, request_info, callback, request->AllowedByDefault()); | 299 permission_type, request_info, callback, request->AllowedByDefault()); |
| 301 } | 300 } |
| 302 | 301 |
| 303 BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( | 302 BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( |
| 304 const OpenURLParams& params) { | 303 const OpenURLParams& params) { |
| 305 BrowserPluginGuestManager* guest_manager = | 304 BrowserPluginGuestManager* guest_manager = |
| 306 GetWebContents()->GetBrowserPluginGuestManager(); | 305 BrowserPluginGuestManager::FromBrowserContext( |
| 306 GetWebContents()->GetBrowserContext()); |
| 307 | 307 |
| 308 // Allocate a new instance ID for the new guest. | 308 // Allocate a new instance ID for the new guest. |
| 309 int instance_id = guest_manager->get_next_instance_id(); | 309 int instance_id = guest_manager->GetNextInstanceID(); |
| 310 | 310 |
| 311 // Set the attach params to use the same partition as the opener. | 311 // Set the attach params to use the same partition as the opener. |
| 312 // We pull the partition information from the site's URL, which is of the form | 312 // We pull the partition information from the site's URL, which is of the form |
| 313 // guest://site/{persist}?{partition_name}. | 313 // guest://site/{persist}?{partition_name}. |
| 314 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL(); | 314 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL(); |
| 315 BrowserPluginHostMsg_Attach_Params attach_params; | 315 BrowserPluginHostMsg_Attach_Params attach_params; |
| 316 attach_params.storage_partition_id = site_url.query(); | 316 attach_params.storage_partition_id = site_url.query(); |
| 317 attach_params.persist_storage = | 317 attach_params.persist_storage = |
| 318 site_url.path().find("persist") != std::string::npos; | 318 site_url.path().find("persist") != std::string::npos; |
| 319 | 319 |
| 320 // The new guest gets a copy of this guest's extra params so that the content | 320 // The new guest gets a copy of this guest's extra params so that the content |
| 321 // embedder exposes the same API for this guest as its opener. | 321 // embedder exposes the same API for this guest as its opener. |
| 322 scoped_ptr<base::DictionaryValue> extra_params( | 322 scoped_ptr<base::DictionaryValue> extra_params( |
| 323 extra_attach_params_->DeepCopy()); | 323 extra_attach_params_->DeepCopy()); |
| 324 BrowserPluginGuest* new_guest = | 324 BrowserPluginGuest* new_guest = |
| 325 GetWebContents()->GetBrowserPluginGuestManager()->CreateGuest( | 325 guest_manager->CreateGuest(GetWebContents()->GetSiteInstance(), |
| 326 GetWebContents()->GetSiteInstance(), instance_id, | 326 instance_id, |
| 327 attach_params, extra_params.Pass()); | 327 attach_params, |
| 328 new_guest->opener_ = AsWeakPtr(); | 328 extra_params.Pass()); |
| 329 if (new_guest->delegate_) |
| 330 new_guest->delegate_->SetOpener(GetWebContents()); |
| 329 | 331 |
| 330 // Take ownership of |new_guest|. | 332 // Take ownership of |new_guest|. |
| 331 pending_new_windows_.insert( | 333 pending_new_windows_.insert( |
| 332 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); | 334 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); |
| 333 | 335 |
| 334 // Request permission to show the new window. | 336 // Request permission to show the new window. |
| 335 RequestNewWindowPermission(params.disposition, gfx::Rect(), | 337 RequestNewWindowPermission(params.disposition, gfx::Rect(), |
| 336 params.user_gesture, new_guest->GetWebContents()); | 338 params.user_gesture, new_guest->GetWebContents()); |
| 337 | 339 |
| 338 return new_guest; | 340 return new_guest; |
| 339 } | 341 } |
| 340 | 342 |
| 341 base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() { | 343 base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() { |
| 342 return weak_ptr_factory_.GetWeakPtr(); | 344 return weak_ptr_factory_.GetWeakPtr(); |
| 343 } | 345 } |
| 344 | 346 |
| 345 void BrowserPluginGuest::EmbedderDestroyed() { | 347 void BrowserPluginGuest::EmbedderDestroyed() { |
| 346 embedder_web_contents_ = NULL; | 348 embedder_web_contents_ = NULL; |
| 347 if (delegate_) | 349 if (delegate_) |
| 348 delegate_->EmbedderDestroyed(); | 350 delegate_->EmbedderDestroyed(); |
| 349 Destroy(); | 351 Destroy(); |
| 350 } | 352 } |
| 351 | 353 |
| 352 void BrowserPluginGuest::Destroy() { | 354 void BrowserPluginGuest::Destroy() { |
| 353 is_in_destruction_ = true; | 355 is_in_destruction_ = true; |
| 354 if (!attached() && opener()) | 356 if (!attached() && GetOpener()) |
| 355 opener()->pending_new_windows_.erase(this); | 357 GetOpener()->pending_new_windows_.erase(this); |
| 356 DestroyUnattachedWindows(); | 358 DestroyUnattachedWindows(); |
| 357 GetWebContents()->GetBrowserPluginGuestManager()->RemoveGuest(instance_id_); | 359 BrowserPluginGuestManager::FromBrowserContext( |
| 360 GetWebContents()->GetBrowserContext())->RemoveGuest(instance_id_); |
| 358 delete GetWebContents(); | 361 delete GetWebContents(); |
| 359 } | 362 } |
| 360 | 363 |
| 361 bool BrowserPluginGuest::OnMessageReceivedFromEmbedder( | 364 bool BrowserPluginGuest::OnMessageReceivedFromEmbedder( |
| 362 const IPC::Message& message) { | 365 const IPC::Message& message) { |
| 363 bool handled = true; | 366 bool handled = true; |
| 364 IPC_BEGIN_MESSAGE_MAP(BrowserPluginGuest, message) | 367 IPC_BEGIN_MESSAGE_MAP(BrowserPluginGuest, message) |
| 365 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CompositorFrameSwappedACK, | 368 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CompositorFrameSwappedACK, |
| 366 OnCompositorFrameSwappedACK) | 369 OnCompositorFrameSwappedACK) |
| 367 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck, | 370 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck, |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 BrowserPluginGuest* BrowserPluginGuest::Create( | 505 BrowserPluginGuest* BrowserPluginGuest::Create( |
| 503 int instance_id, | 506 int instance_id, |
| 504 SiteInstance* guest_site_instance, | 507 SiteInstance* guest_site_instance, |
| 505 WebContentsImpl* web_contents, | 508 WebContentsImpl* web_contents, |
| 506 scoped_ptr<base::DictionaryValue> extra_params) { | 509 scoped_ptr<base::DictionaryValue> extra_params) { |
| 507 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Create")); | 510 RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.Create")); |
| 508 BrowserPluginGuest* guest = NULL; | 511 BrowserPluginGuest* guest = NULL; |
| 509 if (factory_) { | 512 if (factory_) { |
| 510 guest = factory_->CreateBrowserPluginGuest(instance_id, web_contents); | 513 guest = factory_->CreateBrowserPluginGuest(instance_id, web_contents); |
| 511 } else { | 514 } else { |
| 512 guest = new BrowserPluginGuest(instance_id, false, web_contents, NULL); | 515 guest = new BrowserPluginGuest(instance_id, false, web_contents); |
| 513 } | 516 } |
| 514 guest->extra_attach_params_.reset(extra_params->DeepCopy()); | 517 guest->extra_attach_params_.reset(extra_params->DeepCopy()); |
| 515 web_contents->SetBrowserPluginGuest(guest); | 518 web_contents->SetBrowserPluginGuest(guest); |
| 516 BrowserPluginGuestDelegate* delegate = NULL; | 519 BrowserPluginGuestDelegate* delegate = NULL; |
| 517 GetContentClient()->browser()->GuestWebContentsCreated( | 520 GetContentClient()->browser()->GuestWebContentsCreated( |
| 518 guest_site_instance, web_contents, NULL, &delegate, extra_params.Pass()); | 521 guest_site_instance, web_contents, NULL, &delegate, extra_params.Pass()); |
| 519 guest->SetDelegate(delegate); | 522 guest->SetDelegate(delegate); |
| 520 return guest; | 523 return guest; |
| 521 } | 524 } |
| 522 | 525 |
| 523 // static | 526 // static |
| 524 BrowserPluginGuest* BrowserPluginGuest::CreateWithOpener( | 527 BrowserPluginGuest* BrowserPluginGuest::CreateWithOpener( |
| 525 int instance_id, | 528 int instance_id, |
| 526 bool has_render_view, | 529 bool has_render_view, |
| 527 WebContentsImpl* web_contents, | 530 WebContentsImpl* web_contents, |
| 528 BrowserPluginGuest* opener) { | 531 BrowserPluginGuest* opener) { |
| 529 BrowserPluginGuest* guest = | 532 BrowserPluginGuest* guest = |
| 530 new BrowserPluginGuest( | 533 new BrowserPluginGuest( |
| 531 instance_id, has_render_view, web_contents, opener); | 534 instance_id, has_render_view, web_contents); |
| 532 web_contents->SetBrowserPluginGuest(guest); | 535 web_contents->SetBrowserPluginGuest(guest); |
| 533 BrowserPluginGuestDelegate* delegate = NULL; | 536 BrowserPluginGuestDelegate* delegate = NULL; |
| 534 GetContentClient()->browser()->GuestWebContentsCreated( | 537 GetContentClient()->browser()->GuestWebContentsCreated( |
| 535 opener->GetWebContents()->GetSiteInstance(), | 538 opener->GetWebContents()->GetSiteInstance(), |
| 536 web_contents, opener->GetWebContents(), &delegate, | 539 web_contents, opener->GetWebContents(), &delegate, |
| 537 scoped_ptr<base::DictionaryValue>()); | 540 scoped_ptr<base::DictionaryValue>()); |
| 538 guest->SetDelegate(delegate); | 541 guest->SetDelegate(delegate); |
| 539 return guest; | 542 return guest; |
| 540 } | 543 } |
| 541 | 544 |
| 542 RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() { | 545 RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() { |
| 543 if (!attached()) | 546 if (!attached()) |
| 544 return NULL; | 547 return NULL; |
| 545 return embedder_web_contents_->GetRenderWidgetHostView(); | 548 return embedder_web_contents_->GetRenderWidgetHostView(); |
| 546 } | 549 } |
| 547 | 550 |
| 551 BrowserPluginGuest* BrowserPluginGuest::GetOpener() { |
| 552 if (!delegate_) |
| 553 return NULL; |
| 554 |
| 555 WebContents* opener = delegate_->GetOpener(); |
| 556 if (!opener) |
| 557 return NULL; |
| 558 |
| 559 return static_cast<WebContentsImpl*>(opener)->GetBrowserPluginGuest(); |
| 560 } |
| 561 |
| 548 void BrowserPluginGuest::UpdateVisibility() { | 562 void BrowserPluginGuest::UpdateVisibility() { |
| 549 OnSetVisibility(instance_id_, visible()); | 563 OnSetVisibility(instance_id_, visible()); |
| 550 } | 564 } |
| 551 | 565 |
| 552 void BrowserPluginGuest::CopyFromCompositingSurface( | 566 void BrowserPluginGuest::CopyFromCompositingSurface( |
| 553 gfx::Rect src_subrect, | 567 gfx::Rect src_subrect, |
| 554 gfx::Size dst_size, | 568 gfx::Size dst_size, |
| 555 const base::Callback<void(bool, const SkBitmap&)>& callback) { | 569 const base::Callback<void(bool, const SkBitmap&)>& callback) { |
| 556 copy_request_callbacks_.insert(std::make_pair(++copy_request_id_, callback)); | 570 copy_request_callbacks_.insert(std::make_pair(++copy_request_id_, callback)); |
| 557 SendMessageToEmbedder( | 571 SendMessageToEmbedder( |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 } | 704 } |
| 691 | 705 |
| 692 WebContents* BrowserPluginGuest::OpenURLFromTab(WebContents* source, | 706 WebContents* BrowserPluginGuest::OpenURLFromTab(WebContents* source, |
| 693 const OpenURLParams& params) { | 707 const OpenURLParams& params) { |
| 694 // If the guest wishes to navigate away prior to attachment then we save the | 708 // If the guest wishes to navigate away prior to attachment then we save the |
| 695 // navigation to perform upon attachment. Navigation initializes a lot of | 709 // navigation to perform upon attachment. Navigation initializes a lot of |
| 696 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest. | 710 // state that assumes an embedder exists, such as RenderWidgetHostViewGuest. |
| 697 // Navigation also resumes resource loading which we don't want to allow | 711 // Navigation also resumes resource loading which we don't want to allow |
| 698 // until attachment. | 712 // until attachment. |
| 699 if (!attached()) { | 713 if (!attached()) { |
| 700 PendingWindowMap::iterator it = opener()->pending_new_windows_.find(this); | 714 PendingWindowMap::iterator it = |
| 701 if (it == opener()->pending_new_windows_.end()) | 715 GetOpener()->pending_new_windows_.find(this); |
| 716 if (it == GetOpener()->pending_new_windows_.end()) |
| 702 return NULL; | 717 return NULL; |
| 703 const NewWindowInfo& old_target_url = it->second; | 718 const NewWindowInfo& old_target_url = it->second; |
| 704 NewWindowInfo new_window_info(params.url, old_target_url.name); | 719 NewWindowInfo new_window_info(params.url, old_target_url.name); |
| 705 new_window_info.changed = new_window_info.url != old_target_url.url; | 720 new_window_info.changed = new_window_info.url != old_target_url.url; |
| 706 it->second = new_window_info; | 721 it->second = new_window_info; |
| 707 return NULL; | 722 return NULL; |
| 708 } | 723 } |
| 709 if (params.disposition == CURRENT_TAB) { | 724 if (params.disposition == CURRENT_TAB) { |
| 710 // This can happen for cross-site redirects. | 725 // This can happen for cross-site redirects. |
| 711 LoadURLWithParams(params.url, params.referrer, params.transition, source); | 726 LoadURLWithParams(params.url, params.referrer, params.transition, source); |
| 712 return source; | 727 return source; |
| 713 } | 728 } |
| 714 | 729 |
| 715 return CreateNewGuestWindow(params)->GetWebContents(); | 730 return CreateNewGuestWindow(params)->GetWebContents(); |
| 716 } | 731 } |
| 717 | 732 |
| 718 void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents, | 733 void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents, |
| 719 int opener_render_frame_id, | 734 int opener_render_frame_id, |
| 720 const base::string16& frame_name, | 735 const base::string16& frame_name, |
| 721 const GURL& target_url, | 736 const GURL& target_url, |
| 722 WebContents* new_contents) { | 737 WebContents* new_contents) { |
| 723 WebContentsImpl* new_contents_impl = | 738 WebContentsImpl* new_contents_impl = |
| 724 static_cast<WebContentsImpl*>(new_contents); | 739 static_cast<WebContentsImpl*>(new_contents); |
| 725 BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest(); | 740 BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest(); |
| 726 guest->opener_ = AsWeakPtr(); | 741 if (guest->delegate_) |
| 742 guest->delegate_->SetOpener(GetWebContents()); |
| 727 std::string guest_name = base::UTF16ToUTF8(frame_name); | 743 std::string guest_name = base::UTF16ToUTF8(frame_name); |
| 728 guest->name_ = guest_name; | 744 guest->name_ = guest_name; |
| 729 // Take ownership of the new guest until it is attached to the embedder's DOM | 745 // Take ownership of the new guest until it is attached to the embedder's DOM |
| 730 // tree to avoid leaking a guest if this guest is destroyed before attaching | 746 // tree to avoid leaking a guest if this guest is destroyed before attaching |
| 731 // the new guest. | 747 // the new guest. |
| 732 pending_new_windows_.insert( | 748 pending_new_windows_.insert( |
| 733 std::make_pair(guest, NewWindowInfo(target_url, guest_name))); | 749 std::make_pair(guest, NewWindowInfo(target_url, guest_name))); |
| 734 } | 750 } |
| 735 | 751 |
| 736 void BrowserPluginGuest::RendererUnresponsive(WebContents* source) { | 752 void BrowserPluginGuest::RendererUnresponsive(WebContents* source) { |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 GetWebContents()->GetRenderViewHost())->Init(); | 1029 GetWebContents()->GetRenderViewHost())->Init(); |
| 1014 WebContentsViewGuest* new_view = | 1030 WebContentsViewGuest* new_view = |
| 1015 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView()); | 1031 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView()); |
| 1016 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost()); | 1032 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost()); |
| 1017 } | 1033 } |
| 1018 | 1034 |
| 1019 // We need to do a navigation here if the target URL has changed between | 1035 // We need to do a navigation here if the target URL has changed between |
| 1020 // the time the WebContents was created and the time it was attached. | 1036 // the time the WebContents was created and the time it was attached. |
| 1021 // We also need to do an initial navigation if a RenderView was never | 1037 // We also need to do an initial navigation if a RenderView was never |
| 1022 // created for the new window in cases where there is no referrer. | 1038 // created for the new window in cases where there is no referrer. |
| 1023 PendingWindowMap::iterator it = opener()->pending_new_windows_.find(this); | 1039 PendingWindowMap::iterator it = GetOpener()->pending_new_windows_.find(this); |
| 1024 if (it != opener()->pending_new_windows_.end()) { | 1040 if (it != GetOpener()->pending_new_windows_.end()) { |
| 1025 const NewWindowInfo& new_window_info = it->second; | 1041 const NewWindowInfo& new_window_info = it->second; |
| 1026 if (new_window_info.changed || !has_render_view_) | 1042 if (new_window_info.changed || !has_render_view_) |
| 1027 params.src = it->second.url.spec(); | 1043 params.src = it->second.url.spec(); |
| 1028 } else { | 1044 } else { |
| 1029 NOTREACHED(); | 1045 NOTREACHED(); |
| 1030 } | 1046 } |
| 1031 | 1047 |
| 1032 // Once a new guest is attached to the DOM of the embedder page, then the | 1048 // Once a new guest is attached to the DOM of the embedder page, then the |
| 1033 // lifetime of the new guest is no longer managed by the opener guest. | 1049 // lifetime of the new guest is no longer managed by the opener guest. |
| 1034 opener()->pending_new_windows_.erase(this); | 1050 GetOpener()->pending_new_windows_.erase(this); |
| 1035 | 1051 |
| 1036 // The guest's frame name takes precedence over the BrowserPlugin's name. | 1052 // The guest's frame name takes precedence over the BrowserPlugin's name. |
| 1037 // The guest's frame name is assigned in | 1053 // The guest's frame name is assigned in |
| 1038 // BrowserPluginGuest::WebContentsCreated. | 1054 // BrowserPluginGuest::WebContentsCreated. |
| 1039 if (!name_.empty()) | 1055 if (!name_.empty()) |
| 1040 params.name.clear(); | 1056 params.name.clear(); |
| 1041 | 1057 |
| 1042 Initialize(params, embedder_web_contents); | 1058 Initialize(params, embedder_web_contents); |
| 1043 | 1059 |
| 1044 SendQueuedMessages(); | 1060 SendQueuedMessages(); |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1525 const GURL& url) { | 1541 const GURL& url) { |
| 1526 if (!url.is_valid()) { | 1542 if (!url.is_valid()) { |
| 1527 callback.Run(false); | 1543 callback.Run(false); |
| 1528 return; | 1544 return; |
| 1529 } | 1545 } |
| 1530 | 1546 |
| 1531 delegate_->CanDownload(request_method, url, callback); | 1547 delegate_->CanDownload(request_method, url, callback); |
| 1532 } | 1548 } |
| 1533 | 1549 |
| 1534 } // namespace content | 1550 } // namespace content |
| OLD | NEW |