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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 13032003: Browser Plugin: <webview> should inherit partition attribute of opener on attachment. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed nit Created 7 years, 8 months 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
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/renderer/browser_plugin/browser_plugin.h" 5 #include "content/renderer/browser_plugin/browser_plugin.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/json/json_string_value_serializer.h" 8 #include "base/json/json_string_value_serializer.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 guest_crashed_(false), 134 guest_crashed_(false),
135 auto_size_ack_pending_(false), 135 auto_size_ack_pending_(false),
136 guest_process_id_(-1), 136 guest_process_id_(-1),
137 guest_route_id_(-1), 137 guest_route_id_(-1),
138 persist_storage_(false), 138 persist_storage_(false),
139 valid_partition_id_(true), 139 valid_partition_id_(true),
140 content_window_routing_id_(MSG_ROUTING_NONE), 140 content_window_routing_id_(MSG_ROUTING_NONE),
141 plugin_focused_(false), 141 plugin_focused_(false),
142 visible_(true), 142 visible_(true),
143 size_changed_in_flight_(false), 143 size_changed_in_flight_(false),
144 allocate_instance_id_sent_(false), 144 before_first_navigation_(true),
145 browser_plugin_manager_(render_view->browser_plugin_manager()), 145 browser_plugin_manager_(render_view->browser_plugin_manager()),
146 current_nav_entry_index_(0), 146 current_nav_entry_index_(0),
147 nav_entry_count_(0), 147 nav_entry_count_(0),
148 compositing_enabled_(false), 148 compositing_enabled_(false),
149 ALLOW_THIS_IN_INITIALIZER_LIST( 149 ALLOW_THIS_IN_INITIALIZER_LIST(
150 weak_ptr_factory_(this)) { 150 weak_ptr_factory_(this)) {
151 } 151 }
152 152
153 BrowserPlugin::~BrowserPlugin() { 153 BrowserPlugin::~BrowserPlugin() {
154 // If the BrowserPlugin has never navigated then the browser process and 154 // If the BrowserPlugin has never navigated then the browser process and
(...skipping 12 matching lines...) Expand all
167 WebKit::WebPluginContainer* container) { 167 WebKit::WebPluginContainer* container) {
168 PluginContainerMap* browser_plugins = g_plugin_container_map.Pointer(); 168 PluginContainerMap* browser_plugins = g_plugin_container_map.Pointer();
169 PluginContainerMap::iterator it = browser_plugins->find(container); 169 PluginContainerMap::iterator it = browser_plugins->find(container);
170 return it == browser_plugins->end() ? NULL : it->second; 170 return it == browser_plugins->end() ? NULL : it->second;
171 } 171 }
172 172
173 bool BrowserPlugin::OnMessageReceived(const IPC::Message& message) { 173 bool BrowserPlugin::OnMessageReceived(const IPC::Message& message) {
174 bool handled = true; 174 bool handled = true;
175 IPC_BEGIN_MESSAGE_MAP(BrowserPlugin, message) 175 IPC_BEGIN_MESSAGE_MAP(BrowserPlugin, message)
176 IPC_MESSAGE_HANDLER(BrowserPluginMsg_AdvanceFocus, OnAdvanceFocus) 176 IPC_MESSAGE_HANDLER(BrowserPluginMsg_AdvanceFocus, OnAdvanceFocus)
177 IPC_MESSAGE_HANDLER(BrowserPluginMsg_Attach_ACK, OnAttachACK)
177 IPC_MESSAGE_HANDLER(BrowserPluginMsg_BuffersSwapped, OnBuffersSwapped) 178 IPC_MESSAGE_HANDLER(BrowserPluginMsg_BuffersSwapped, OnBuffersSwapped)
178 IPC_MESSAGE_HANDLER_GENERIC(BrowserPluginMsg_CompositorFrameSwapped, 179 IPC_MESSAGE_HANDLER_GENERIC(BrowserPluginMsg_CompositorFrameSwapped,
179 OnCompositorFrameSwapped(message)) 180 OnCompositorFrameSwapped(message))
180 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestContentWindowReady, 181 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestContentWindowReady,
181 OnGuestContentWindowReady) 182 OnGuestContentWindowReady)
182 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone) 183 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone)
183 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestResponsive, OnGuestResponsive) 184 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestResponsive, OnGuestResponsive)
184 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestUnresponsive, OnGuestUnresponsive) 185 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestUnresponsive, OnGuestUnresponsive)
185 IPC_MESSAGE_HANDLER(BrowserPluginMsg_LoadAbort, OnLoadAbort) 186 IPC_MESSAGE_HANDLER(BrowserPluginMsg_LoadAbort, OnLoadAbort)
186 IPC_MESSAGE_HANDLER(BrowserPluginMsg_LoadCommit, OnLoadCommit) 187 IPC_MESSAGE_HANDLER(BrowserPluginMsg_LoadCommit, OnLoadCommit)
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 std::string src = GetSrcAttribute(); 330 std::string src = GetSrcAttribute();
330 if (src.empty()) 331 if (src.empty())
331 return true; 332 return true;
332 333
333 // If we haven't created the guest yet, do so now. We will navigate it right 334 // If we haven't created the guest yet, do so now. We will navigate it right
334 // after creation. If |src| is empty, we can delay the creation until we 335 // after creation. If |src| is empty, we can delay the creation until we
335 // actually need it. 336 // actually need it.
336 if (!HasGuest()) { 337 if (!HasGuest()) {
337 // On initial navigation, we request an instance ID from the browser 338 // On initial navigation, we request an instance ID from the browser
338 // process. We essentially ignore all subsequent calls to SetSrcAttribute 339 // process. We essentially ignore all subsequent calls to SetSrcAttribute
339 // until we receive an instance ID. |allocate_instance_id_sent_| 340 // until we receive an instance ID. |before_first_navigation_|
340 // prevents BrowserPlugin from allocating more than one instance ID. 341 // prevents BrowserPlugin from allocating more than one instance ID.
341 // Upon receiving an instance ID from the browser process, we continue 342 // Upon receiving an instance ID from the browser process, we continue
342 // the process of navigation by populating the 343 // the process of navigation by populating the
343 // BrowserPluginHostMsg_CreateGuest_Params with the current state of 344 // BrowserPluginHostMsg_CreateGuest_Params with the current state of
344 // BrowserPlugin and sending a BrowserPluginHostMsg_CreateGuest to the 345 // BrowserPlugin and sending a BrowserPluginHostMsg_CreateGuest to the
345 // browser process in order to create a new guest. 346 // browser process in order to create a new guest.
346 if (!allocate_instance_id_sent_) { 347 if (before_first_navigation_) {
347 browser_plugin_manager()->AllocateInstanceID(this); 348 browser_plugin_manager()->AllocateInstanceID(this);
348 allocate_instance_id_sent_ = true; 349 before_first_navigation_ = false;
349 } 350 }
350 return true; 351 return true;
351 } 352 }
352 353
353 browser_plugin_manager()->Send( 354 browser_plugin_manager()->Send(
354 new BrowserPluginHostMsg_NavigateGuest(render_view_routing_id_, 355 new BrowserPluginHostMsg_NavigateGuest(render_view_routing_id_,
355 instance_id_, 356 instance_id_,
356 src)); 357 src));
357 return true; 358 return true;
358 } 359 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 418
418 bool BrowserPlugin::UsesPendingDamageBuffer( 419 bool BrowserPlugin::UsesPendingDamageBuffer(
419 const BrowserPluginMsg_UpdateRect_Params& params) { 420 const BrowserPluginMsg_UpdateRect_Params& params) {
420 if (!pending_damage_buffer_.get()) 421 if (!pending_damage_buffer_.get())
421 return false; 422 return false;
422 return damage_buffer_sequence_id_ == params.damage_buffer_sequence_id; 423 return damage_buffer_sequence_id_ == params.damage_buffer_sequence_id;
423 } 424 }
424 425
425 void BrowserPlugin::SetInstanceID(int instance_id, bool new_guest) { 426 void BrowserPlugin::SetInstanceID(int instance_id, bool new_guest) {
426 CHECK(instance_id != browser_plugin::kInstanceIDNone); 427 CHECK(instance_id != browser_plugin::kInstanceIDNone);
428 before_first_navigation_ = false;
427 instance_id_ = instance_id; 429 instance_id_ = instance_id;
428 browser_plugin_manager()->AddBrowserPlugin(instance_id, this); 430 browser_plugin_manager()->AddBrowserPlugin(instance_id, this);
429 431
430 BrowserPluginHostMsg_CreateGuest_Params create_guest_params; 432 BrowserPluginHostMsg_CreateGuest_Params create_guest_params;
431 create_guest_params.focused = ShouldGuestBeFocused(); 433 create_guest_params.focused = ShouldGuestBeFocused();
432 create_guest_params.visible = visible_; 434 create_guest_params.visible = visible_;
433 create_guest_params.name = GetNameAttribute(); 435 create_guest_params.name = GetNameAttribute();
434 GetDamageBufferWithSizeParams(&create_guest_params.auto_size_params, 436 GetDamageBufferWithSizeParams(&create_guest_params.auto_size_params,
435 &create_guest_params.resize_guest_params); 437 &create_guest_params.resize_guest_params);
436 438
(...skipping 16 matching lines...) Expand all
453 void BrowserPlugin::DidCommitCompositorFrame() { 455 void BrowserPlugin::DidCommitCompositorFrame() {
454 if (compositing_helper_) 456 if (compositing_helper_)
455 compositing_helper_->DidCommitCompositorFrame(); 457 compositing_helper_->DidCommitCompositorFrame();
456 } 458 }
457 459
458 void BrowserPlugin::OnAdvanceFocus(int instance_id, bool reverse) { 460 void BrowserPlugin::OnAdvanceFocus(int instance_id, bool reverse) {
459 DCHECK(render_view_); 461 DCHECK(render_view_);
460 render_view_->GetWebView()->advanceFocus(reverse); 462 render_view_->GetWebView()->advanceFocus(reverse);
461 } 463 }
462 464
465 void BrowserPlugin::OnAttachACK(
466 int instance_id,
467 const BrowserPluginMsg_Attach_ACK_Params& params) {
468 // Update BrowserPlugin attributes to match the state of the guest.
469 if (!params.name.empty())
470 OnUpdatedName(instance_id, params.name);
471 if (!params.storage_partition_id.empty()) {
472 std::string partition_name =
473 (params.persist_storage ? browser_plugin::kPersistPrefix : "") +
474 params.storage_partition_id;
475 UpdateDOMAttribute(browser_plugin::kAttributePartition, partition_name);
476 }
477 }
478
463 void BrowserPlugin::OnBuffersSwapped(int instance_id, 479 void BrowserPlugin::OnBuffersSwapped(int instance_id,
464 const gfx::Size& size, 480 const gfx::Size& size,
465 std::string mailbox_name, 481 std::string mailbox_name,
466 int gpu_route_id, 482 int gpu_route_id,
467 int gpu_host_id) { 483 int gpu_host_id) {
468 DCHECK(instance_id == instance_id_); 484 DCHECK(instance_id == instance_id_);
469 EnableCompositing(true); 485 EnableCompositing(true);
470 486
471 compositing_helper_->OnBuffersSwapped(size, 487 compositing_helper_->OnBuffersSwapped(size,
472 mailbox_name, 488 mailbox_name,
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 bool BrowserPlugin::CanGoBack() const { 859 bool BrowserPlugin::CanGoBack() const {
844 return nav_entry_count_ > 1 && current_nav_entry_index_ > 0; 860 return nav_entry_count_ > 1 && current_nav_entry_index_ > 0;
845 } 861 }
846 862
847 bool BrowserPlugin::CanGoForward() const { 863 bool BrowserPlugin::CanGoForward() const {
848 return current_nav_entry_index_ >= 0 && 864 return current_nav_entry_index_ >= 0 &&
849 current_nav_entry_index_ < (nav_entry_count_ - 1); 865 current_nav_entry_index_ < (nav_entry_count_ - 1);
850 } 866 }
851 867
852 bool BrowserPlugin::ParsePartitionAttribute(std::string* error_message) { 868 bool BrowserPlugin::ParsePartitionAttribute(std::string* error_message) {
853 if (allocate_instance_id_sent_) { 869 if (!before_first_navigation_) {
854 *error_message = browser_plugin::kErrorAlreadyNavigated; 870 *error_message = browser_plugin::kErrorAlreadyNavigated;
855 return false; 871 return false;
856 } 872 }
857 873
858 std::string input = GetPartitionAttribute(); 874 std::string input = GetPartitionAttribute();
859 875
860 // Since the "persist:" prefix is in ASCII, StartsWith will work fine on 876 // Since the "persist:" prefix is in ASCII, StartsWith will work fine on
861 // UTF-8 encoded |partition_id|. If the prefix is a match, we can safely 877 // UTF-8 encoded |partition_id|. If the prefix is a match, we can safely
862 // remove the prefix without splicing in the middle of a multi-byte codepoint. 878 // remove the prefix without splicing in the middle of a multi-byte codepoint.
863 // We can use the rest of the string as UTF-8 encoded one. 879 // We can use the rest of the string as UTF-8 encoded one.
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 if (container_) 1254 if (container_)
1239 return container_->windowToLocalPoint(WebKit::WebPoint(point)); 1255 return container_->windowToLocalPoint(WebKit::WebPoint(point));
1240 return gfx::Point(point.x() - plugin_rect_.x(), point.y() - plugin_rect_.y()); 1256 return gfx::Point(point.x() - plugin_rect_.x(), point.y() - plugin_rect_.y());
1241 } 1257 }
1242 1258
1243 // static 1259 // static
1244 bool BrowserPlugin::ShouldForwardToBrowserPlugin( 1260 bool BrowserPlugin::ShouldForwardToBrowserPlugin(
1245 const IPC::Message& message) { 1261 const IPC::Message& message) {
1246 switch (message.type()) { 1262 switch (message.type()) {
1247 case BrowserPluginMsg_AdvanceFocus::ID: 1263 case BrowserPluginMsg_AdvanceFocus::ID:
1264 case BrowserPluginMsg_Attach_ACK::ID:
1248 case BrowserPluginMsg_BuffersSwapped::ID: 1265 case BrowserPluginMsg_BuffersSwapped::ID:
1249 case BrowserPluginMsg_CompositorFrameSwapped::ID: 1266 case BrowserPluginMsg_CompositorFrameSwapped::ID:
1250 case BrowserPluginMsg_GuestContentWindowReady::ID: 1267 case BrowserPluginMsg_GuestContentWindowReady::ID:
1251 case BrowserPluginMsg_GuestGone::ID: 1268 case BrowserPluginMsg_GuestGone::ID:
1252 case BrowserPluginMsg_GuestResponsive::ID: 1269 case BrowserPluginMsg_GuestResponsive::ID:
1253 case BrowserPluginMsg_GuestUnresponsive::ID: 1270 case BrowserPluginMsg_GuestUnresponsive::ID:
1254 case BrowserPluginMsg_LoadAbort::ID: 1271 case BrowserPluginMsg_LoadAbort::ID:
1255 case BrowserPluginMsg_LoadCommit::ID: 1272 case BrowserPluginMsg_LoadCommit::ID:
1256 case BrowserPluginMsg_LoadRedirect::ID: 1273 case BrowserPluginMsg_LoadRedirect::ID:
1257 case BrowserPluginMsg_LoadStart::ID: 1274 case BrowserPluginMsg_LoadStart::ID:
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 const WebKit::WebMouseEvent& event) { 1536 const WebKit::WebMouseEvent& event) {
1520 browser_plugin_manager()->Send( 1537 browser_plugin_manager()->Send(
1521 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, 1538 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_,
1522 instance_id_, 1539 instance_id_,
1523 plugin_rect_, 1540 plugin_rect_,
1524 &event)); 1541 &event));
1525 return true; 1542 return true;
1526 } 1543 }
1527 1544
1528 } // namespace content 1545 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698