| 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 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 NavigateGuest(src, false /* force_navigation */); | 330 NavigateGuest(src, false /* force_navigation */); |
| 331 } | 331 } |
| 332 } | 332 } |
| 333 | 333 |
| 334 bool allow_transparency = false; | 334 bool allow_transparency = false; |
| 335 attach_params()->GetBoolean(webview::kAttributeAllowTransparency, | 335 attach_params()->GetBoolean(webview::kAttributeAllowTransparency, |
| 336 &allow_transparency); | 336 &allow_transparency); |
| 337 // We need to set the background opaque flag after navigation to ensure that | 337 // We need to set the background opaque flag after navigation to ensure that |
| 338 // there is a RenderWidgetHostView available. | 338 // there is a RenderWidgetHostView available. |
| 339 SetAllowTransparency(allow_transparency); | 339 SetAllowTransparency(allow_transparency); |
| 340 | |
| 341 if (web_view_guest_delegate_) | |
| 342 web_view_guest_delegate_->OnDidAttachToEmbedder(); | |
| 343 } | 340 } |
| 344 | 341 |
| 345 void WebViewGuest::DidInitialize() { | 342 void WebViewGuest::DidInitialize() { |
| 346 script_executor_.reset( | 343 script_executor_.reset( |
| 347 new ScriptExecutor(web_contents(), &script_observers_)); | 344 new ScriptExecutor(web_contents(), &script_observers_)); |
| 348 | 345 |
| 349 notification_registrar_.Add(this, | 346 notification_registrar_.Add(this, |
| 350 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, | 347 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, |
| 351 content::Source<WebContents>(web_contents())); | 348 content::Source<WebContents>(web_contents())); |
| 352 | 349 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 365 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); | 362 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); |
| 366 } | 363 } |
| 367 | 364 |
| 368 void WebViewGuest::DidStopLoading() { | 365 void WebViewGuest::DidStopLoading() { |
| 369 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 366 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 370 DispatchEventToEmbedder( | 367 DispatchEventToEmbedder( |
| 371 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); | 368 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); |
| 372 } | 369 } |
| 373 | 370 |
| 374 void WebViewGuest::EmbedderWillBeDestroyed() { | 371 void WebViewGuest::EmbedderWillBeDestroyed() { |
| 375 if (web_view_guest_delegate_) | |
| 376 web_view_guest_delegate_->OnEmbedderWillBeDestroyed(); | |
| 377 | |
| 378 // Clean up rules registries for the webview. | 372 // Clean up rules registries for the webview. |
| 379 RulesRegistryService::Get(browser_context()) | 373 RulesRegistryService::Get(browser_context()) |
| 380 ->RemoveRulesRegistriesByID(rules_registry_id_); | 374 ->RemoveRulesRegistriesByID(rules_registry_id_); |
| 381 WebViewKey key(owner_web_contents()->GetRenderProcessHost()->GetID(), | 375 WebViewKey key(owner_web_contents()->GetRenderProcessHost()->GetID(), |
| 382 view_instance_id()); | 376 view_instance_id()); |
| 383 web_view_key_to_id_map.Get().erase(key); | 377 web_view_key_to_id_map.Get().erase(key); |
| 384 | 378 |
| 385 content::BrowserThread::PostTask( | 379 content::BrowserThread::PostTask( |
| 386 content::BrowserThread::IO, | 380 content::BrowserThread::IO, |
| 387 FROM_HERE, | 381 FROM_HERE, |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 resource_redirect_details->new_url, | 607 resource_redirect_details->new_url, |
| 614 is_top_level); | 608 is_top_level); |
| 615 break; | 609 break; |
| 616 } | 610 } |
| 617 default: | 611 default: |
| 618 NOTREACHED() << "Unexpected notification sent."; | 612 NOTREACHED() << "Unexpected notification sent."; |
| 619 break; | 613 break; |
| 620 } | 614 } |
| 621 } | 615 } |
| 622 | 616 |
| 623 double WebViewGuest::GetZoom() { | |
| 624 if (!web_view_guest_delegate_) | |
| 625 return 1.0; | |
| 626 return web_view_guest_delegate_->GetZoom(); | |
| 627 } | |
| 628 | |
| 629 void WebViewGuest::StartFinding( | 617 void WebViewGuest::StartFinding( |
| 630 const base::string16& search_text, | 618 const base::string16& search_text, |
| 631 const blink::WebFindOptions& options, | 619 const blink::WebFindOptions& options, |
| 632 scoped_refptr<WebViewInternalFindFunction> find_function) { | 620 scoped_refptr<WebViewInternalFindFunction> find_function) { |
| 633 find_helper_.Find(web_contents(), search_text, options, find_function); | 621 find_helper_.Find(web_contents(), search_text, options, find_function); |
| 634 } | 622 } |
| 635 | 623 |
| 636 void WebViewGuest::StopFinding(content::StopFindAction action) { | 624 void WebViewGuest::StopFinding(content::StopFindAction action) { |
| 637 find_helper_.CancelAllFindSessions(); | 625 find_helper_.CancelAllFindSessions(); |
| 638 web_contents()->StopFinding(action); | 626 web_contents()->StopFinding(action); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 content::WebContents* owner_web_contents, | 693 content::WebContents* owner_web_contents, |
| 706 int guest_instance_id) | 694 int guest_instance_id) |
| 707 : GuestView<WebViewGuest>(browser_context, | 695 : GuestView<WebViewGuest>(browser_context, |
| 708 owner_web_contents, | 696 owner_web_contents, |
| 709 guest_instance_id), | 697 guest_instance_id), |
| 710 rules_registry_id_(RulesRegistryService::kInvalidRulesRegistryID), | 698 rules_registry_id_(RulesRegistryService::kInvalidRulesRegistryID), |
| 711 find_helper_(this), | 699 find_helper_(this), |
| 712 is_overriding_user_agent_(false), | 700 is_overriding_user_agent_(false), |
| 713 guest_opaque_(true), | 701 guest_opaque_(true), |
| 714 javascript_dialog_helper_(this), | 702 javascript_dialog_helper_(this), |
| 703 current_zoom_factor_(1.0), |
| 715 weak_ptr_factory_(this) { | 704 weak_ptr_factory_(this) { |
| 716 web_view_guest_delegate_.reset( | 705 web_view_guest_delegate_.reset( |
| 717 ExtensionsAPIClient::Get()->CreateWebViewGuestDelegate(this)); | 706 ExtensionsAPIClient::Get()->CreateWebViewGuestDelegate(this)); |
| 718 } | 707 } |
| 719 | 708 |
| 720 WebViewGuest::~WebViewGuest() { | 709 WebViewGuest::~WebViewGuest() { |
| 721 } | 710 } |
| 722 | 711 |
| 723 void WebViewGuest::DidCommitProvisionalLoadForFrame( | 712 void WebViewGuest::DidCommitProvisionalLoadForFrame( |
| 724 content::RenderFrameHost* render_frame_host, | 713 content::RenderFrameHost* render_frame_host, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 738 args->SetInteger(webview::kInternalCurrentEntryIndex, | 727 args->SetInteger(webview::kInternalCurrentEntryIndex, |
| 739 web_contents()->GetController().GetCurrentEntryIndex()); | 728 web_contents()->GetController().GetCurrentEntryIndex()); |
| 740 args->SetInteger(webview::kInternalEntryCount, | 729 args->SetInteger(webview::kInternalEntryCount, |
| 741 web_contents()->GetController().GetEntryCount()); | 730 web_contents()->GetController().GetEntryCount()); |
| 742 args->SetInteger(webview::kInternalProcessId, | 731 args->SetInteger(webview::kInternalProcessId, |
| 743 web_contents()->GetRenderProcessHost()->GetID()); | 732 web_contents()->GetRenderProcessHost()->GetID()); |
| 744 DispatchEventToEmbedder( | 733 DispatchEventToEmbedder( |
| 745 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); | 734 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); |
| 746 | 735 |
| 747 find_helper_.CancelAllFindSessions(); | 736 find_helper_.CancelAllFindSessions(); |
| 737 |
| 738 // Update the current zoom factor for the new page. |
| 739 ui_zoom::ZoomController* zoom_controller = |
| 740 ui_zoom::ZoomController::FromWebContents(web_contents()); |
| 741 DCHECK(zoom_controller); |
| 742 current_zoom_factor_ = |
| 743 content::ZoomLevelToZoomFactor(zoom_controller->GetZoomLevel()); |
| 744 |
| 748 if (web_view_guest_delegate_) { | 745 if (web_view_guest_delegate_) { |
| 749 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( | 746 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( |
| 750 !render_frame_host->GetParent()); | 747 !render_frame_host->GetParent()); |
| 751 } | 748 } |
| 752 } | 749 } |
| 753 | 750 |
| 754 void WebViewGuest::DidFailProvisionalLoad( | 751 void WebViewGuest::DidFailProvisionalLoad( |
| 755 content::RenderFrameHost* render_frame_host, | 752 content::RenderFrameHost* render_frame_host, |
| 756 const GURL& validated_url, | 753 const GURL& validated_url, |
| 757 int error_code, | 754 int error_code, |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1060 | 1057 |
| 1061 void WebViewGuest::SetName(const std::string& name) { | 1058 void WebViewGuest::SetName(const std::string& name) { |
| 1062 if (name_ == name) | 1059 if (name_ == name) |
| 1063 return; | 1060 return; |
| 1064 name_ = name; | 1061 name_ = name; |
| 1065 | 1062 |
| 1066 Send(new ExtensionMsg_SetFrameName(routing_id(), name_)); | 1063 Send(new ExtensionMsg_SetFrameName(routing_id(), name_)); |
| 1067 } | 1064 } |
| 1068 | 1065 |
| 1069 void WebViewGuest::SetZoom(double zoom_factor) { | 1066 void WebViewGuest::SetZoom(double zoom_factor) { |
| 1070 if (web_view_guest_delegate_) | 1067 ui_zoom::ZoomController* zoom_controller = |
| 1071 web_view_guest_delegate_->OnSetZoom(zoom_factor); | 1068 ui_zoom::ZoomController::FromWebContents(web_contents()); |
| 1069 DCHECK(zoom_controller); |
| 1070 double zoom_level = content::ZoomFactorToZoomLevel(zoom_factor); |
| 1071 zoom_controller->SetZoomLevel(zoom_level); |
| 1072 |
| 1073 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 1074 args->SetDouble(webview::kOldZoomFactor, current_zoom_factor_); |
| 1075 args->SetDouble(webview::kNewZoomFactor, zoom_factor); |
| 1076 DispatchEventToEmbedder( |
| 1077 new GuestViewBase::Event(webview::kEventZoomChange, args.Pass())); |
| 1078 current_zoom_factor_ = zoom_factor; |
| 1072 } | 1079 } |
| 1073 | 1080 |
| 1074 void WebViewGuest::SetAllowTransparency(bool allow) { | 1081 void WebViewGuest::SetAllowTransparency(bool allow) { |
| 1075 if (guest_opaque_ != allow) | 1082 if (guest_opaque_ != allow) |
| 1076 return; | 1083 return; |
| 1077 | 1084 |
| 1078 guest_opaque_ = !allow; | 1085 guest_opaque_ = !allow; |
| 1079 if (!web_contents()->GetRenderViewHost()->GetView()) | 1086 if (!web_contents()->GetRenderViewHost()->GetView()) |
| 1080 return; | 1087 return; |
| 1081 | 1088 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), | 1273 WebViewGuest::From(owner_web_contents()->GetRenderProcessHost()->GetID(), |
| 1267 new_window_instance_id); | 1274 new_window_instance_id); |
| 1268 if (!guest) | 1275 if (!guest) |
| 1269 return; | 1276 return; |
| 1270 | 1277 |
| 1271 if (!allow) | 1278 if (!allow) |
| 1272 guest->Destroy(); | 1279 guest->Destroy(); |
| 1273 } | 1280 } |
| 1274 | 1281 |
| 1275 } // namespace extensions | 1282 } // namespace extensions |
| OLD | NEW |