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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 11027065: Browser plugin: Implement titleChanged event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix for pages with no title Created 8 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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/string_util.h" 9 #include "base/string_util.h"
10 #include "content/browser/browser_plugin/browser_plugin_embedder.h" 10 #include "content/browser/browser_plugin/browser_plugin_embedder.h"
11 #include "content/browser/browser_plugin/browser_plugin_guest_helper.h" 11 #include "content/browser/browser_plugin/browser_plugin_guest_helper.h"
12 #include "content/browser/browser_plugin/browser_plugin_host_factory.h" 12 #include "content/browser/browser_plugin/browser_plugin_host_factory.h"
13 #include "content/browser/renderer_host/render_view_host_impl.h" 13 #include "content/browser/renderer_host/render_view_host_impl.h"
14 #include "content/browser/renderer_host/render_widget_host_impl.h" 14 #include "content/browser/renderer_host/render_widget_host_impl.h"
15 #include "content/browser/web_contents/web_contents_impl.h" 15 #include "content/browser/web_contents/web_contents_impl.h"
16 #include "content/common/browser_plugin_messages.h" 16 #include "content/common/browser_plugin_messages.h"
17 #include "content/common/view_messages.h" 17 #include "content/common/view_messages.h"
18 #include "content/port/browser/render_view_host_delegate_view.h" 18 #include "content/port/browser/render_view_host_delegate_view.h"
19 #include "content/public/browser/navigation_entry.h"
19 #include "content/public/browser/notification_service.h" 20 #include "content/public/browser/notification_service.h"
20 #include "content/public/browser/notification_types.h" 21 #include "content/public/browser/notification_types.h"
21 #include "content/public/browser/render_process_host.h" 22 #include "content/public/browser/render_process_host.h"
22 #include "content/public/browser/render_widget_host_view.h" 23 #include "content/public/browser/render_widget_host_view.h"
23 #include "content/public/browser/resource_request_details.h" 24 #include "content/public/browser/resource_request_details.h"
24 #include "content/public/browser/user_metrics.h" 25 #include "content/public/browser/user_metrics.h"
25 #include "content/public/common/result_codes.h" 26 #include "content/public/common/result_codes.h"
26 #include "content/browser/browser_plugin/browser_plugin_host_factory.h" 27 #include "content/browser/browser_plugin/browser_plugin_host_factory.h"
27 #include "net/base/net_errors.h" 28 #include "net/base/net_errors.h"
28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
(...skipping 27 matching lines...) Expand all
56 base::TimeDelta::FromMilliseconds(kGuestHangTimeoutMs)), 57 base::TimeDelta::FromMilliseconds(kGuestHangTimeoutMs)),
57 focused_(focused), 58 focused_(focused),
58 visible_(visible) { 59 visible_(visible) {
59 DCHECK(web_contents); 60 DCHECK(web_contents);
60 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper. 61 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper.
61 new BrowserPluginGuestHelper(this, render_view_host); 62 new BrowserPluginGuestHelper(this, render_view_host);
62 63
63 notification_registrar_.Add( 64 notification_registrar_.Add(
64 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, 65 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
65 content::Source<content::WebContents>(web_contents)); 66 content::Source<content::WebContents>(web_contents));
67 notification_registrar_.Add(
68 this, content::NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED,
69 content::Source<content::WebContents>(web_contents));
66 } 70 }
67 71
68 BrowserPluginGuest::~BrowserPluginGuest() { 72 BrowserPluginGuest::~BrowserPluginGuest() {
69 } 73 }
70 74
71 // static 75 // static
72 BrowserPluginGuest* BrowserPluginGuest::Create( 76 BrowserPluginGuest* BrowserPluginGuest::Create(
73 int instance_id, 77 int instance_id,
74 WebContentsImpl* web_contents, 78 WebContentsImpl* web_contents,
75 content::RenderViewHost* render_view_host, 79 content::RenderViewHost* render_view_host,
(...skipping 19 matching lines...) Expand all
95 DCHECK_EQ(Source<WebContents>(source).ptr(), web_contents()); 99 DCHECK_EQ(Source<WebContents>(source).ptr(), web_contents());
96 ResourceRedirectDetails* resource_redirect_details = 100 ResourceRedirectDetails* resource_redirect_details =
97 Details<ResourceRedirectDetails>(details).ptr(); 101 Details<ResourceRedirectDetails>(details).ptr();
98 bool is_top_level = 102 bool is_top_level =
99 resource_redirect_details->resource_type == ResourceType::MAIN_FRAME; 103 resource_redirect_details->resource_type == ResourceType::MAIN_FRAME;
100 LoadRedirect(resource_redirect_details->url, 104 LoadRedirect(resource_redirect_details->url,
101 resource_redirect_details->new_url, 105 resource_redirect_details->new_url,
102 is_top_level); 106 is_top_level);
103 break; 107 break;
104 } 108 }
109 case NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED: {
110 DCHECK_EQ(Source<WebContents>(source).ptr(), web_contents());
111 std::pair<NavigationEntry*, bool>* title =
112 Details<std::pair<NavigationEntry*, bool> >(details).ptr();
113 if (title->first) {
114 string16 title_text = title->first->GetTitle();
115 TitleChange(title_text);
116 }
117 break;
118 }
105 default: 119 default:
106 NOTREACHED() << "Unexpected notification sent."; 120 NOTREACHED() << "Unexpected notification sent.";
107 break; 121 break;
108 } 122 }
109 } 123 }
110 124
111 bool BrowserPluginGuest::ViewTakeFocus(bool reverse) { 125 bool BrowserPluginGuest::ViewTakeFocus(bool reverse) {
112 SendMessageToEmbedder( 126 SendMessageToEmbedder(
113 new BrowserPluginMsg_AdvanceFocus(instance_id(), reverse)); 127 new BrowserPluginMsg_AdvanceFocus(instance_id(), reverse));
114 return true; 128 return true;
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 444
431 void BrowserPluginGuest::LoadRedirect( 445 void BrowserPluginGuest::LoadRedirect(
432 const GURL& old_url, 446 const GURL& old_url,
433 const GURL& new_url, 447 const GURL& new_url,
434 bool is_top_level) { 448 bool is_top_level) {
435 SendMessageToEmbedder( 449 SendMessageToEmbedder(
436 new BrowserPluginMsg_LoadRedirect( 450 new BrowserPluginMsg_LoadRedirect(
437 instance_id(), old_url, new_url, is_top_level)); 451 instance_id(), old_url, new_url, is_top_level));
438 } 452 }
439 453
454 void BrowserPluginGuest::TitleChange(const string16& title) {
455 SendMessageToEmbedder(
456 new BrowserPluginMsg_TitleChange(instance_id(), title));
457 }
458
440 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( 459 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame(
441 int64 frame_id, 460 int64 frame_id,
442 bool is_main_frame, 461 bool is_main_frame,
443 const GURL& url, 462 const GURL& url,
444 PageTransition transition_type, 463 PageTransition transition_type,
445 RenderViewHost* render_view_host) { 464 RenderViewHost* render_view_host) {
446 // Inform its embedder of the updated URL. 465 // Inform its embedder of the updated URL.
447 BrowserPluginMsg_LoadCommit_Params params; 466 BrowserPluginMsg_LoadCommit_Params params;
448 params.url = url; 467 params.url = url;
449 params.is_top_level = is_main_frame; 468 params.is_top_level = is_main_frame;
450 params.process_id = render_view_host->GetProcess()->GetID(); 469 params.process_id = render_view_host->GetProcess()->GetID();
451 params.current_entry_index = 470 params.current_entry_index =
452 web_contents()->GetController().GetCurrentEntryIndex(); 471 web_contents()->GetController().GetCurrentEntryIndex();
453 params.entry_count = 472 params.entry_count =
454 web_contents()->GetController().GetEntryCount(); 473 web_contents()->GetController().GetEntryCount();
455 SendMessageToEmbedder( 474 SendMessageToEmbedder(
456 new BrowserPluginMsg_LoadCommit(instance_id(), params)); 475 new BrowserPluginMsg_LoadCommit(instance_id(), params));
457 RecordAction(UserMetricsAction("BrowserPlugin.Guest.DidNavigate")); 476 RecordAction(UserMetricsAction("BrowserPlugin.Guest.DidNavigate"));
477
478 // Also update title on commit, since the notifications only occur for
479 // changes to existing titles, not updates due to back/forward or to
480 // new pages with no titles.
481 TitleChange(web_contents()->GetTitle());
458 } 482 }
459 483
460 void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) { 484 void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) {
461 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id())); 485 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id()));
462 } 486 }
463 487
464 void BrowserPluginGuest::RenderViewReady() { 488 void BrowserPluginGuest::RenderViewReady() {
465 // TODO(fsamuel): Investigate whether it's possible to update state earlier 489 // TODO(fsamuel): Investigate whether it's possible to update state earlier
466 // here (see http://www.crbug.com/158151). 490 // here (see http://www.crbug.com/158151).
467 RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); 491 RenderViewHost* render_view_host = web_contents()->GetRenderViewHost();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 default: 527 default:
504 break; 528 break;
505 } 529 }
506 } 530 }
507 531
508 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { 532 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) {
509 embedder_web_contents_->GetRenderProcessHost()->Send(msg); 533 embedder_web_contents_->GetRenderProcessHost()->Send(msg);
510 } 534 }
511 535
512 } // namespace content 536 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698