| 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 17 matching lines...) Expand all Loading... |
| 28 #include "content/public/common/media_stream_request.h" | 28 #include "content/public/common/media_stream_request.h" |
| 29 #include "content/public/common/page_zoom.h" | 29 #include "content/public/common/page_zoom.h" |
| 30 #include "content/public/common/result_codes.h" | 30 #include "content/public/common/result_codes.h" |
| 31 #include "content/public/common/stop_find_action.h" | 31 #include "content/public/common/stop_find_action.h" |
| 32 #include "content/public/common/url_constants.h" | 32 #include "content/public/common/url_constants.h" |
| 33 #include "extensions/browser/api/declarative/rules_registry_service.h" | 33 #include "extensions/browser/api/declarative/rules_registry_service.h" |
| 34 #include "extensions/browser/api/extensions_api_client.h" | 34 #include "extensions/browser/api/extensions_api_client.h" |
| 35 #include "extensions/browser/api/guest_view/web_view/web_view_internal_api.h" | 35 #include "extensions/browser/api/guest_view/web_view/web_view_internal_api.h" |
| 36 #include "extensions/browser/api/web_request/web_request_api.h" | 36 #include "extensions/browser/api/web_request/web_request_api.h" |
| 37 #include "extensions/browser/extension_system.h" | 37 #include "extensions/browser/extension_system.h" |
| 38 #include "extensions/browser/guest_view/guest_view_event.h" |
| 38 #include "extensions/browser/guest_view/guest_view_manager.h" | 39 #include "extensions/browser/guest_view/guest_view_manager.h" |
| 39 #include "extensions/browser/guest_view/web_view/web_view_constants.h" | 40 #include "extensions/browser/guest_view/web_view/web_view_constants.h" |
| 40 #include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" | 41 #include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" |
| 41 #include "extensions/browser/guest_view/web_view/web_view_permission_types.h" | 42 #include "extensions/browser/guest_view/web_view/web_view_permission_types.h" |
| 42 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" | 43 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" |
| 43 #include "extensions/common/constants.h" | 44 #include "extensions/common/constants.h" |
| 44 #include "extensions/common/extension_messages.h" | 45 #include "extensions/common/extension_messages.h" |
| 45 #include "extensions/common/guest_view/guest_view_constants.h" | 46 #include "extensions/common/guest_view/guest_view_constants.h" |
| 46 #include "extensions/strings/grit/extensions_strings.h" | 47 #include "extensions/strings/grit/extensions_strings.h" |
| 47 #include "ipc/ipc_message_macros.h" | 48 #include "ipc/ipc_message_macros.h" |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 } | 302 } |
| 302 | 303 |
| 303 void WebViewGuest::DidAttachToEmbedder() { | 304 void WebViewGuest::DidAttachToEmbedder() { |
| 304 ApplyAttributes(*attach_params()); | 305 ApplyAttributes(*attach_params()); |
| 305 } | 306 } |
| 306 | 307 |
| 307 void WebViewGuest::DidDropLink(const GURL& url) { | 308 void WebViewGuest::DidDropLink(const GURL& url) { |
| 308 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 309 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 309 args->SetString(guestview::kUrl, url.spec()); | 310 args->SetString(guestview::kUrl, url.spec()); |
| 310 DispatchEventToView( | 311 DispatchEventToView( |
| 311 new GuestViewBase::Event(webview::kEventDropLink, args.Pass())); | 312 new GuestViewEvent(this, webview::kEventDropLink, args.Pass())); |
| 312 } | 313 } |
| 313 | 314 |
| 314 void WebViewGuest::DidInitialize(const base::DictionaryValue& create_params) { | 315 void WebViewGuest::DidInitialize(const base::DictionaryValue& create_params) { |
| 315 script_executor_.reset( | 316 script_executor_.reset( |
| 316 new ScriptExecutor(web_contents(), &script_observers_)); | 317 new ScriptExecutor(web_contents(), &script_observers_)); |
| 317 | 318 |
| 318 notification_registrar_.Add(this, | 319 notification_registrar_.Add(this, |
| 319 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, | 320 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, |
| 320 content::Source<WebContents>(web_contents())); | 321 content::Source<WebContents>(web_contents())); |
| 321 | 322 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 partition->ClearData( | 362 partition->ClearData( |
| 362 storage_partition_removal_mask, | 363 storage_partition_removal_mask, |
| 363 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, GURL(), | 364 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, GURL(), |
| 364 content::StoragePartition::OriginMatcherFunction(), remove_since, | 365 content::StoragePartition::OriginMatcherFunction(), remove_since, |
| 365 base::Time::Now(), callback); | 366 base::Time::Now(), callback); |
| 366 } | 367 } |
| 367 | 368 |
| 368 void WebViewGuest::GuestViewDidStopLoading() { | 369 void WebViewGuest::GuestViewDidStopLoading() { |
| 369 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 370 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 370 DispatchEventToView( | 371 DispatchEventToView( |
| 371 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); | 372 new GuestViewEvent(this, webview::kEventLoadStop, args.Pass())); |
| 372 } | 373 } |
| 373 | 374 |
| 374 void WebViewGuest::EmbedderFullscreenToggled(bool entered_fullscreen) { | 375 void WebViewGuest::EmbedderFullscreenToggled(bool entered_fullscreen) { |
| 375 is_embedder_fullscreen_ = entered_fullscreen; | 376 is_embedder_fullscreen_ = entered_fullscreen; |
| 376 // If the embedder has got out of fullscreen, we get out of fullscreen | 377 // If the embedder has got out of fullscreen, we get out of fullscreen |
| 377 // mode as well. | 378 // mode as well. |
| 378 if (!entered_fullscreen) | 379 if (!entered_fullscreen) |
| 379 SetFullscreenState(false); | 380 SetFullscreenState(false); |
| 380 } | 381 } |
| 381 | 382 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 } | 435 } |
| 435 | 436 |
| 436 void WebViewGuest::GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, | 437 void WebViewGuest::GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, |
| 437 const gfx::Size& new_size) { | 438 const gfx::Size& new_size) { |
| 438 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 439 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 439 args->SetInteger(webview::kOldHeight, old_size.height()); | 440 args->SetInteger(webview::kOldHeight, old_size.height()); |
| 440 args->SetInteger(webview::kOldWidth, old_size.width()); | 441 args->SetInteger(webview::kOldWidth, old_size.width()); |
| 441 args->SetInteger(webview::kNewHeight, new_size.height()); | 442 args->SetInteger(webview::kNewHeight, new_size.height()); |
| 442 args->SetInteger(webview::kNewWidth, new_size.width()); | 443 args->SetInteger(webview::kNewWidth, new_size.width()); |
| 443 DispatchEventToView( | 444 DispatchEventToView( |
| 444 new GuestViewBase::Event(webview::kEventSizeChanged, args.Pass())); | 445 new GuestViewEvent(this, webview::kEventSizeChanged, args.Pass())); |
| 445 } | 446 } |
| 446 | 447 |
| 447 bool WebViewGuest::IsAutoSizeSupported() const { | 448 bool WebViewGuest::IsAutoSizeSupported() const { |
| 448 return true; | 449 return true; |
| 449 } | 450 } |
| 450 | 451 |
| 451 bool WebViewGuest::IsDragAndDropEnabled() const { | 452 bool WebViewGuest::IsDragAndDropEnabled() const { |
| 452 return true; | 453 return true; |
| 453 } | 454 } |
| 454 | 455 |
| 455 void WebViewGuest::GuestZoomChanged(double old_zoom_level, | 456 void WebViewGuest::GuestZoomChanged(double old_zoom_level, |
| 456 double new_zoom_level) { | 457 double new_zoom_level) { |
| 457 // Dispatch the zoomchange event. | 458 // Dispatch the zoomchange event. |
| 458 double old_zoom_factor = ConvertZoomLevelToZoomFactor(old_zoom_level); | 459 double old_zoom_factor = ConvertZoomLevelToZoomFactor(old_zoom_level); |
| 459 double new_zoom_factor = ConvertZoomLevelToZoomFactor(new_zoom_level); | 460 double new_zoom_factor = ConvertZoomLevelToZoomFactor(new_zoom_level); |
| 460 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 461 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 461 args->SetDouble(webview::kOldZoomFactor, old_zoom_factor); | 462 args->SetDouble(webview::kOldZoomFactor, old_zoom_factor); |
| 462 args->SetDouble(webview::kNewZoomFactor, new_zoom_factor); | 463 args->SetDouble(webview::kNewZoomFactor, new_zoom_factor); |
| 463 DispatchEventToView( | 464 DispatchEventToView( |
| 464 new GuestViewBase::Event(webview::kEventZoomChange, args.Pass())); | 465 new GuestViewEvent(this, webview::kEventZoomChange, args.Pass())); |
| 465 } | 466 } |
| 466 | 467 |
| 467 void WebViewGuest::WillDestroy() { | 468 void WebViewGuest::WillDestroy() { |
| 468 if (!attached() && GetOpener()) | 469 if (!attached() && GetOpener()) |
| 469 GetOpener()->pending_new_windows_.erase(this); | 470 GetOpener()->pending_new_windows_.erase(this); |
| 470 } | 471 } |
| 471 | 472 |
| 472 bool WebViewGuest::AddMessageToConsole(WebContents* source, | 473 bool WebViewGuest::AddMessageToConsole(WebContents* source, |
| 473 int32 level, | 474 int32 level, |
| 474 const base::string16& message, | 475 const base::string16& message, |
| 475 int32 line_no, | 476 int32 line_no, |
| 476 const base::string16& source_id) { | 477 const base::string16& source_id) { |
| 477 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 478 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 478 // Log levels are from base/logging.h: LogSeverity. | 479 // Log levels are from base/logging.h: LogSeverity. |
| 479 args->SetInteger(webview::kLevel, level); | 480 args->SetInteger(webview::kLevel, level); |
| 480 args->SetString(webview::kMessage, message); | 481 args->SetString(webview::kMessage, message); |
| 481 args->SetInteger(webview::kLine, line_no); | 482 args->SetInteger(webview::kLine, line_no); |
| 482 args->SetString(webview::kSourceId, source_id); | 483 args->SetString(webview::kSourceId, source_id); |
| 483 DispatchEventToView( | 484 DispatchEventToView( |
| 484 new GuestViewBase::Event(webview::kEventConsoleMessage, args.Pass())); | 485 new GuestViewEvent(this, webview::kEventConsoleMessage, args.Pass())); |
| 485 return true; | 486 return true; |
| 486 } | 487 } |
| 487 | 488 |
| 488 void WebViewGuest::CloseContents(WebContents* source) { | 489 void WebViewGuest::CloseContents(WebContents* source) { |
| 489 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 490 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 490 DispatchEventToView( | 491 DispatchEventToView( |
| 491 new GuestViewBase::Event(webview::kEventClose, args.Pass())); | 492 new GuestViewEvent(this, webview::kEventClose, args.Pass())); |
| 492 } | 493 } |
| 493 | 494 |
| 494 void WebViewGuest::FindReply(WebContents* source, | 495 void WebViewGuest::FindReply(WebContents* source, |
| 495 int request_id, | 496 int request_id, |
| 496 int number_of_matches, | 497 int number_of_matches, |
| 497 const gfx::Rect& selection_rect, | 498 const gfx::Rect& selection_rect, |
| 498 int active_match_ordinal, | 499 int active_match_ordinal, |
| 499 bool final_update) { | 500 bool final_update) { |
| 500 find_helper_.FindReply(request_id, | 501 find_helper_.FindReply(request_id, |
| 501 number_of_matches, | 502 number_of_matches, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 const blink::WebGestureEvent& event) { | 535 const blink::WebGestureEvent& event) { |
| 535 return !allow_scaling_ && GuestViewBase::PreHandleGestureEvent(source, event); | 536 return !allow_scaling_ && GuestViewBase::PreHandleGestureEvent(source, event); |
| 536 } | 537 } |
| 537 | 538 |
| 538 void WebViewGuest::LoadProgressChanged(content::WebContents* source, | 539 void WebViewGuest::LoadProgressChanged(content::WebContents* source, |
| 539 double progress) { | 540 double progress) { |
| 540 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 541 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 541 args->SetString(guestview::kUrl, web_contents()->GetURL().spec()); | 542 args->SetString(guestview::kUrl, web_contents()->GetURL().spec()); |
| 542 args->SetDouble(webview::kProgress, progress); | 543 args->SetDouble(webview::kProgress, progress); |
| 543 DispatchEventToView( | 544 DispatchEventToView( |
| 544 new GuestViewBase::Event(webview::kEventLoadProgress, args.Pass())); | 545 new GuestViewEvent(this, webview::kEventLoadProgress, args.Pass())); |
| 545 } | 546 } |
| 546 | 547 |
| 547 void WebViewGuest::LoadAbort(bool is_top_level, | 548 void WebViewGuest::LoadAbort(bool is_top_level, |
| 548 const GURL& url, | 549 const GURL& url, |
| 549 int error_code, | 550 int error_code, |
| 550 const std::string& error_type) { | 551 const std::string& error_type) { |
| 551 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 552 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 552 args->SetBoolean(guestview::kIsTopLevel, is_top_level); | 553 args->SetBoolean(guestview::kIsTopLevel, is_top_level); |
| 553 args->SetString(guestview::kUrl, url.possibly_invalid_spec()); | 554 args->SetString(guestview::kUrl, url.possibly_invalid_spec()); |
| 554 args->SetInteger(guestview::kCode, error_code); | 555 args->SetInteger(guestview::kCode, error_code); |
| 555 args->SetString(guestview::kReason, error_type); | 556 args->SetString(guestview::kReason, error_type); |
| 556 DispatchEventToView( | 557 DispatchEventToView( |
| 557 new GuestViewBase::Event(webview::kEventLoadAbort, args.Pass())); | 558 new GuestViewEvent(this, webview::kEventLoadAbort, args.Pass())); |
| 558 } | 559 } |
| 559 | 560 |
| 560 void WebViewGuest::CreateNewGuestWebViewWindow( | 561 void WebViewGuest::CreateNewGuestWebViewWindow( |
| 561 const content::OpenURLParams& params) { | 562 const content::OpenURLParams& params) { |
| 562 GuestViewManager* guest_manager = | 563 GuestViewManager* guest_manager = |
| 563 GuestViewManager::FromBrowserContext(browser_context()); | 564 GuestViewManager::FromBrowserContext(browser_context()); |
| 564 // Set the attach params to use the same partition as the opener. | 565 // Set the attach params to use the same partition as the opener. |
| 565 // We pull the partition information from the site's URL, which is of the | 566 // We pull the partition information from the site's URL, which is of the |
| 566 // form guest://site/{persist}?{partition_name}. | 567 // form guest://site/{persist}?{partition_name}. |
| 567 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); | 568 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 595 new_guest->web_contents()); | 596 new_guest->web_contents()); |
| 596 } | 597 } |
| 597 | 598 |
| 598 // TODO(fsamuel): Find a reliable way to test the 'responsive' and | 599 // TODO(fsamuel): Find a reliable way to test the 'responsive' and |
| 599 // 'unresponsive' events. | 600 // 'unresponsive' events. |
| 600 void WebViewGuest::RendererResponsive(content::WebContents* source) { | 601 void WebViewGuest::RendererResponsive(content::WebContents* source) { |
| 601 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 602 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 602 args->SetInteger(webview::kProcessId, | 603 args->SetInteger(webview::kProcessId, |
| 603 web_contents()->GetRenderProcessHost()->GetID()); | 604 web_contents()->GetRenderProcessHost()->GetID()); |
| 604 DispatchEventToView( | 605 DispatchEventToView( |
| 605 new GuestViewBase::Event(webview::kEventResponsive, args.Pass())); | 606 new GuestViewEvent(this, webview::kEventResponsive, args.Pass())); |
| 606 } | 607 } |
| 607 | 608 |
| 608 void WebViewGuest::RendererUnresponsive(content::WebContents* source) { | 609 void WebViewGuest::RendererUnresponsive(content::WebContents* source) { |
| 609 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 610 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 610 args->SetInteger(webview::kProcessId, | 611 args->SetInteger(webview::kProcessId, |
| 611 web_contents()->GetRenderProcessHost()->GetID()); | 612 web_contents()->GetRenderProcessHost()->GetID()); |
| 612 DispatchEventToView( | 613 DispatchEventToView( |
| 613 new GuestViewBase::Event(webview::kEventUnresponsive, args.Pass())); | 614 new GuestViewEvent(this, webview::kEventUnresponsive, args.Pass())); |
| 614 } | 615 } |
| 615 | 616 |
| 616 void WebViewGuest::Observe(int type, | 617 void WebViewGuest::Observe(int type, |
| 617 const content::NotificationSource& source, | 618 const content::NotificationSource& source, |
| 618 const content::NotificationDetails& details) { | 619 const content::NotificationDetails& details) { |
| 619 switch (type) { | 620 switch (type) { |
| 620 case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: { | 621 case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: { |
| 621 DCHECK_EQ(content::Source<WebContents>(source).ptr(), web_contents()); | 622 DCHECK_EQ(content::Source<WebContents>(source).ptr(), web_contents()); |
| 622 if (content::Source<WebContents>(source).ptr() == web_contents()) | 623 if (content::Source<WebContents>(source).ptr() == web_contents()) |
| 623 LoadHandlerCalled(); | 624 LoadHandlerCalled(); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 752 .GetLastCommittedEntry() | 753 .GetLastCommittedEntry() |
| 753 ->GetBaseURLForDataURL() | 754 ->GetBaseURLForDataURL() |
| 754 .spec()); | 755 .spec()); |
| 755 args->SetInteger(webview::kInternalCurrentEntryIndex, | 756 args->SetInteger(webview::kInternalCurrentEntryIndex, |
| 756 web_contents()->GetController().GetCurrentEntryIndex()); | 757 web_contents()->GetController().GetCurrentEntryIndex()); |
| 757 args->SetInteger(webview::kInternalEntryCount, | 758 args->SetInteger(webview::kInternalEntryCount, |
| 758 web_contents()->GetController().GetEntryCount()); | 759 web_contents()->GetController().GetEntryCount()); |
| 759 args->SetInteger(webview::kInternalProcessId, | 760 args->SetInteger(webview::kInternalProcessId, |
| 760 web_contents()->GetRenderProcessHost()->GetID()); | 761 web_contents()->GetRenderProcessHost()->GetID()); |
| 761 DispatchEventToView( | 762 DispatchEventToView( |
| 762 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); | 763 new GuestViewEvent(this, webview::kEventLoadCommit, args.Pass())); |
| 763 | 764 |
| 764 find_helper_.CancelAllFindSessions(); | 765 find_helper_.CancelAllFindSessions(); |
| 765 | 766 |
| 766 if (web_view_guest_delegate_) { | 767 if (web_view_guest_delegate_) { |
| 767 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( | 768 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( |
| 768 !render_frame_host->GetParent()); | 769 !render_frame_host->GetParent()); |
| 769 } | 770 } |
| 770 } | 771 } |
| 771 | 772 |
| 772 void WebViewGuest::DidFailProvisionalLoad( | 773 void WebViewGuest::DidFailProvisionalLoad( |
| 773 content::RenderFrameHost* render_frame_host, | 774 content::RenderFrameHost* render_frame_host, |
| 774 const GURL& validated_url, | 775 const GURL& validated_url, |
| 775 int error_code, | 776 int error_code, |
| 776 const base::string16& error_description) { | 777 const base::string16& error_description) { |
| 777 LoadAbort(!render_frame_host->GetParent(), validated_url, error_code, | 778 LoadAbort(!render_frame_host->GetParent(), validated_url, error_code, |
| 778 net::ErrorToShortString(error_code)); | 779 net::ErrorToShortString(error_code)); |
| 779 } | 780 } |
| 780 | 781 |
| 781 void WebViewGuest::DidStartProvisionalLoadForFrame( | 782 void WebViewGuest::DidStartProvisionalLoadForFrame( |
| 782 content::RenderFrameHost* render_frame_host, | 783 content::RenderFrameHost* render_frame_host, |
| 783 const GURL& validated_url, | 784 const GURL& validated_url, |
| 784 bool is_error_page, | 785 bool is_error_page, |
| 785 bool is_iframe_srcdoc) { | 786 bool is_iframe_srcdoc) { |
| 786 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 787 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 787 args->SetString(guestview::kUrl, validated_url.spec()); | 788 args->SetString(guestview::kUrl, validated_url.spec()); |
| 788 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent()); | 789 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent()); |
| 789 DispatchEventToView( | 790 DispatchEventToView( |
| 790 new GuestViewBase::Event(webview::kEventLoadStart, args.Pass())); | 791 new GuestViewEvent(this, webview::kEventLoadStart, args.Pass())); |
| 791 } | 792 } |
| 792 | 793 |
| 793 void WebViewGuest::DocumentLoadedInFrame( | 794 void WebViewGuest::DocumentLoadedInFrame( |
| 794 content::RenderFrameHost* render_frame_host) { | 795 content::RenderFrameHost* render_frame_host) { |
| 795 if (web_view_guest_delegate_) | 796 if (web_view_guest_delegate_) |
| 796 web_view_guest_delegate_->OnDocumentLoadedInFrame(render_frame_host); | 797 web_view_guest_delegate_->OnDocumentLoadedInFrame(render_frame_host); |
| 797 } | 798 } |
| 798 | 799 |
| 799 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { | 800 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { |
| 800 // Cancel all find sessions in progress. | 801 // Cancel all find sessions in progress. |
| 801 find_helper_.CancelAllFindSessions(); | 802 find_helper_.CancelAllFindSessions(); |
| 802 | 803 |
| 803 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 804 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 804 args->SetInteger(webview::kProcessId, | 805 args->SetInteger(webview::kProcessId, |
| 805 web_contents()->GetRenderProcessHost()->GetID()); | 806 web_contents()->GetRenderProcessHost()->GetID()); |
| 806 args->SetString(webview::kReason, TerminationStatusToString(status)); | 807 args->SetString(webview::kReason, TerminationStatusToString(status)); |
| 807 DispatchEventToView( | 808 DispatchEventToView( |
| 808 new GuestViewBase::Event(webview::kEventExit, args.Pass())); | 809 new GuestViewEvent(this, webview::kEventExit, args.Pass())); |
| 809 } | 810 } |
| 810 | 811 |
| 811 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { | 812 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { |
| 812 content::NavigationController& controller = web_contents()->GetController(); | 813 content::NavigationController& controller = web_contents()->GetController(); |
| 813 content::NavigationEntry* entry = controller.GetVisibleEntry(); | 814 content::NavigationEntry* entry = controller.GetVisibleEntry(); |
| 814 if (!entry) | 815 if (!entry) |
| 815 return; | 816 return; |
| 816 entry->SetIsOverridingUserAgent(!user_agent.empty()); | 817 entry->SetIsOverridingUserAgent(!user_agent.empty()); |
| 817 web_contents()->GetController().Reload(false); | 818 web_contents()->GetController().Reload(false); |
| 818 } | 819 } |
| 819 | 820 |
| 820 void WebViewGuest::FrameNameChanged(RenderFrameHost* render_frame_host, | 821 void WebViewGuest::FrameNameChanged(RenderFrameHost* render_frame_host, |
| 821 const std::string& name) { | 822 const std::string& name) { |
| 822 if (render_frame_host->GetParent()) | 823 if (render_frame_host->GetParent()) |
| 823 return; | 824 return; |
| 824 | 825 |
| 825 if (name_ == name) | 826 if (name_ == name) |
| 826 return; | 827 return; |
| 827 | 828 |
| 828 ReportFrameNameChange(name); | 829 ReportFrameNameChange(name); |
| 829 } | 830 } |
| 830 | 831 |
| 831 void WebViewGuest::ReportFrameNameChange(const std::string& name) { | 832 void WebViewGuest::ReportFrameNameChange(const std::string& name) { |
| 832 name_ = name; | 833 name_ = name; |
| 833 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 834 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 834 args->SetString(webview::kName, name); | 835 args->SetString(webview::kName, name); |
| 835 DispatchEventToView( | 836 DispatchEventToView( |
| 836 new GuestViewBase::Event(webview::kEventFrameNameChanged, args.Pass())); | 837 new GuestViewEvent(this, webview::kEventFrameNameChanged, args.Pass())); |
| 837 } | 838 } |
| 838 | 839 |
| 839 void WebViewGuest::LoadHandlerCalled() { | 840 void WebViewGuest::LoadHandlerCalled() { |
| 840 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 841 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 841 DispatchEventToView( | 842 DispatchEventToView( |
| 842 new GuestViewBase::Event(webview::kEventContentLoad, args.Pass())); | 843 new GuestViewEvent(this, webview::kEventContentLoad, args.Pass())); |
| 843 } | 844 } |
| 844 | 845 |
| 845 void WebViewGuest::LoadRedirect(const GURL& old_url, | 846 void WebViewGuest::LoadRedirect(const GURL& old_url, |
| 846 const GURL& new_url, | 847 const GURL& new_url, |
| 847 bool is_top_level) { | 848 bool is_top_level) { |
| 848 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 849 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 849 args->SetBoolean(guestview::kIsTopLevel, is_top_level); | 850 args->SetBoolean(guestview::kIsTopLevel, is_top_level); |
| 850 args->SetString(webview::kNewURL, new_url.spec()); | 851 args->SetString(webview::kNewURL, new_url.spec()); |
| 851 args->SetString(webview::kOldURL, old_url.spec()); | 852 args->SetString(webview::kOldURL, old_url.spec()); |
| 852 DispatchEventToView( | 853 DispatchEventToView( |
| 853 new GuestViewBase::Event(webview::kEventLoadRedirect, args.Pass())); | 854 new GuestViewEvent(this, webview::kEventLoadRedirect, args.Pass())); |
| 854 } | 855 } |
| 855 | 856 |
| 856 void WebViewGuest::PushWebViewStateToIOThread() { | 857 void WebViewGuest::PushWebViewStateToIOThread() { |
| 857 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); | 858 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL(); |
| 858 std::string partition_domain; | 859 std::string partition_domain; |
| 859 std::string partition_id; | 860 std::string partition_id; |
| 860 bool in_memory; | 861 bool in_memory; |
| 861 if (!GetGuestPartitionConfigForSite( | 862 if (!GetGuestPartitionConfigForSite( |
| 862 site_url, &partition_domain, &partition_id, &in_memory)) { | 863 site_url, &partition_domain, &partition_id, &in_memory)) { |
| 863 NOTREACHED(); | 864 NOTREACHED(); |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 | 1393 |
| 1393 bool was_fullscreen = is_guest_fullscreen_; | 1394 bool was_fullscreen = is_guest_fullscreen_; |
| 1394 is_guest_fullscreen_ = is_fullscreen; | 1395 is_guest_fullscreen_ = is_fullscreen; |
| 1395 // If the embedder entered fullscreen because of us, it should exit fullscreen | 1396 // If the embedder entered fullscreen because of us, it should exit fullscreen |
| 1396 // when we exit fullscreen. | 1397 // when we exit fullscreen. |
| 1397 if (was_fullscreen && GuestMadeEmbedderFullscreen()) { | 1398 if (was_fullscreen && GuestMadeEmbedderFullscreen()) { |
| 1398 // Dispatch a message so we can call document.webkitCancelFullscreen() | 1399 // Dispatch a message so we can call document.webkitCancelFullscreen() |
| 1399 // on the embedder. | 1400 // on the embedder. |
| 1400 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 1401 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
| 1401 DispatchEventToView( | 1402 DispatchEventToView( |
| 1402 new GuestViewBase::Event(webview::kEventExitFullscreen, args.Pass())); | 1403 new GuestViewEvent(this, webview::kEventExitFullscreen, args.Pass())); |
| 1403 } | 1404 } |
| 1404 // Since we changed fullscreen state, sending a Resize message ensures that | 1405 // Since we changed fullscreen state, sending a Resize message ensures that |
| 1405 // renderer/ sees the change. | 1406 // renderer/ sees the change. |
| 1406 web_contents()->GetRenderViewHost()->WasResized(); | 1407 web_contents()->GetRenderViewHost()->WasResized(); |
| 1407 } | 1408 } |
| 1408 | 1409 |
| 1409 } // namespace extensions | 1410 } // namespace extensions |
| OLD | NEW |