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

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

Issue 11094080: Browser Plugin: More robust recovery from guest crash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed part of test that is no longer valid Created 8 years, 2 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
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/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #if defined (OS_WIN) 9 #if defined (OS_WIN)
10 #include "base/sys_info.h" 10 #include "base/sys_info.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // such a message, subsequent SetSrcAttribute() calls must always send 132 // such a message, subsequent SetSrcAttribute() calls must always send
133 // NavigateGuest messages to the embedder (even if |src| is empty), so 133 // NavigateGuest messages to the embedder (even if |src| is empty), so
134 // resize works correctly for all cases (e.g. The embedder can reset the 134 // resize works correctly for all cases (e.g. The embedder can reset the
135 // guest's |src| to empty value, resize and then set the |src| to a 135 // guest's |src| to empty value, resize and then set the |src| to a
136 // non-empty value). 136 // non-empty value).
137 // Additionally, once this instance has navigated, the storage partition 137 // Additionally, once this instance has navigated, the storage partition
138 // cannot be changed, so this value is used for enforcing this. 138 // cannot be changed, so this value is used for enforcing this.
139 navigate_src_sent_ = true; 139 navigate_src_sent_ = true;
140 } 140 }
141 src_ = src; 141 src_ = src;
142 guest_crashed_ = false;
143 } 142 }
144 143
145 std::string BrowserPlugin::GetPartitionAttribute() const { 144 std::string BrowserPlugin::GetPartitionAttribute() const {
146 std::string value; 145 std::string value;
147 if (persist_storage_) 146 if (persist_storage_)
148 value.append(kPersistPrefix); 147 value.append(kPersistPrefix);
149 148
150 value.append(storage_partition_id_); 149 value.append(storage_partition_id_);
151 return value; 150 return value;
152 } 151 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 if (!navigate_src_sent_) 269 if (!navigate_src_sent_)
271 return; 270 return;
272 BrowserPluginManager::Get()->Send( 271 BrowserPluginManager::Get()->Send(
273 new BrowserPluginHostMsg_Stop(render_view_->GetRoutingID(), 272 new BrowserPluginHostMsg_Stop(render_view_->GetRoutingID(),
274 instance_id_)); 273 instance_id_));
275 } 274 }
276 275
277 void BrowserPlugin::Reload() { 276 void BrowserPlugin::Reload() {
278 if (!navigate_src_sent_) 277 if (!navigate_src_sent_)
279 return; 278 return;
280 guest_crashed_ = false;
281 BrowserPluginManager::Get()->Send( 279 BrowserPluginManager::Get()->Send(
282 new BrowserPluginHostMsg_Reload(render_view_->GetRoutingID(), 280 new BrowserPluginHostMsg_Reload(render_view_->GetRoutingID(),
283 instance_id_)); 281 instance_id_));
284 } 282 }
285 283
286 void BrowserPlugin::UpdateRect( 284 void BrowserPlugin::UpdateRect(
287 int message_id, 285 int message_id,
288 const BrowserPluginMsg_UpdateRect_Params& params) { 286 const BrowserPluginMsg_UpdateRect_Params& params) {
289 if (width() != params.view_size.width() || 287 if (width() != params.view_size.width() ||
290 height() != params.view_size.height()) { 288 height() != params.view_size.height()) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 EventListeners::iterator it = listeners.begin(); 348 EventListeners::iterator it = listeners.begin();
351 for (; it != listeners.end(); ++it) { 349 for (; it != listeners.end(); ++it) {
352 WebKit::WebFrame* frame = plugin.document().frame(); 350 WebKit::WebFrame* frame = plugin.document().frame();
353 if (frame) 351 if (frame)
354 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 0, NULL); 352 frame->callFunctionEvenIfScriptDisabled(*it, v8::Object::New(), 0, NULL);
355 } 353 }
356 } 354 }
357 355
358 void BrowserPlugin::DidNavigate( 356 void BrowserPlugin::DidNavigate(
359 const BrowserPluginMsg_DidNavigate_Params& params) { 357 const BrowserPluginMsg_DidNavigate_Params& params) {
358 // If the guest has just committed a new navigation then it is no longer
359 // crashed.
360 guest_crashed_ = false;
360 src_ = params.url.spec(); 361 src_ = params.url.spec();
361 process_id_ = params.process_id; 362 process_id_ = params.process_id;
362 current_nav_entry_index_ = params.current_entry_index; 363 current_nav_entry_index_ = params.current_entry_index;
363 nav_entry_count_ = params.entry_count; 364 nav_entry_count_ = params.entry_count;
364 365
365 if (!HasListeners(kNavigationEventName)) 366 if (!HasListeners(kNavigationEventName))
366 return; 367 return;
367 368
368 WebKit::WebElement plugin = container()->element(); 369 WebKit::WebElement plugin = container()->element();
369 v8::HandleScope handle_scope; 370 v8::HandleScope handle_scope;
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 params->resize_pending = resize_pending_; 639 params->resize_pending = resize_pending_;
639 params->scale_factor = GetDeviceScaleFactor(); 640 params->scale_factor = GetDeviceScaleFactor();
640 641
641 if (navigate_src_sent_) { 642 if (navigate_src_sent_) {
642 BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ResizeGuest( 643 BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ResizeGuest(
643 render_view_->GetRoutingID(), 644 render_view_->GetRoutingID(),
644 instance_id_, 645 instance_id_,
645 *params)); 646 *params));
646 resize_pending_ = true; 647 resize_pending_ = true;
647 } else { 648 } else {
648 // Until an actual navigation occurs, there is no browser side embedder 649 // Until an actual navigation occurs, there is no browser-side embedder
649 // present to notify about geometry updates. In this case, after we've 650 // present to notify about geometry updates. In this case, after we've
650 // updated the BrowserPlugin's state we are done and we do not send a resize 651 // updated the BrowserPlugin's state we are done and we do not send a resize
651 // message to the browser. 652 // message to the browser.
652 pending_resize_params_.reset(params.release()); 653 pending_resize_params_.reset(params.release());
653 } 654 }
654 if (damage_buffer_) 655 if (damage_buffer_)
655 FreeDamageBuffer(); 656 FreeDamageBuffer();
656 damage_buffer_ = new_damage_buffer; 657 damage_buffer_ = new_damage_buffer;
657 } 658 }
658 659
659 void BrowserPlugin::FreeDamageBuffer() { 660 void BrowserPlugin::FreeDamageBuffer() {
660 DCHECK(damage_buffer_); 661 DCHECK(damage_buffer_);
661 #if defined(OS_MACOSX) 662 #if defined(OS_MACOSX)
662 // We don't need to (nor we should) send ViewHostMsg_FreeTransportDIB 663 // We don't need to (nor should we) send ViewHostMsg_FreeTransportDIB
663 // message to the browser to free the damage buffer since we manage the 664 // message to the browser to free the damage buffer since we manage the
664 // damage buffer ourselves. 665 // damage buffer ourselves.
665 delete damage_buffer_; 666 delete damage_buffer_;
666 #else 667 #else
667 RenderProcess::current()->FreeTransportDIB(damage_buffer_); 668 RenderProcess::current()->FreeTransportDIB(damage_buffer_);
668 damage_buffer_ = NULL; 669 damage_buffer_ = NULL;
669 #endif 670 #endif
670 } 671 }
671 672
672 BrowserPluginHostMsg_ResizeGuest_Params* 673 BrowserPluginHostMsg_ResizeGuest_Params*
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 void* notify_data) { 797 void* notify_data) {
797 } 798 }
798 799
799 void BrowserPlugin::didFailLoadingFrameRequest( 800 void BrowserPlugin::didFailLoadingFrameRequest(
800 const WebKit::WebURL& url, 801 const WebKit::WebURL& url,
801 void* notify_data, 802 void* notify_data,
802 const WebKit::WebURLError& error) { 803 const WebKit::WebURLError& error) {
803 } 804 }
804 805
805 } // namespace content 806 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698