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