| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/i18n/char_iterator.h" | 11 #include "base/i18n/char_iterator.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "content/child/appcache/appcache_dispatcher.h" | 14 #include "content/child/appcache/appcache_dispatcher.h" |
| 15 #include "content/child/plugin_messages.h" | 15 #include "content/child/plugin_messages.h" |
| 16 #include "content/child/quota_dispatcher.h" | 16 #include "content/child/quota_dispatcher.h" |
| 17 #include "content/child/request_extra_data.h" | 17 #include "content/child/request_extra_data.h" |
| 18 #include "content/child/service_worker/web_service_worker_provider_impl.h" | 18 #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| 19 #include "content/common/frame_messages.h" | 19 #include "content/common/frame_messages.h" |
| 20 #include "content/common/socket_stream_handle_data.h" | 20 #include "content/common/socket_stream_handle_data.h" |
| 21 #include "content/common/swapped_out_messages.h" | 21 #include "content/common/swapped_out_messages.h" |
| 22 #include "content/common/view_messages.h" | 22 #include "content/common/view_messages.h" |
| 23 #include "content/public/common/content_constants.h" | 23 #include "content/public/common/content_constants.h" |
| 24 #include "content/public/common/content_switches.h" | 24 #include "content/public/common/content_switches.h" |
| 25 #include "content/public/common/url_constants.h" | 25 #include "content/public/common/url_constants.h" |
| 26 #include "content/public/renderer/content_renderer_client.h" | 26 #include "content/public/renderer/content_renderer_client.h" |
| 27 #include "content/public/renderer/document_state.h" | 27 #include "content/public/renderer/document_state.h" |
| 28 #include "content/public/renderer/navigation_state.h" | 28 #include "content/public/renderer/navigation_state.h" |
| 29 #include "content/public/renderer/render_frame_observer.h" |
| 29 #include "content/renderer/accessibility/renderer_accessibility.h" | 30 #include "content/renderer/accessibility/renderer_accessibility.h" |
| 30 #include "content/renderer/browser_plugin/browser_plugin.h" | 31 #include "content/renderer/browser_plugin/browser_plugin.h" |
| 31 #include "content/renderer/browser_plugin/browser_plugin_manager.h" | 32 #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
| 32 #include "content/renderer/internal_document_state_data.h" | 33 #include "content/renderer/internal_document_state_data.h" |
| 33 #include "content/renderer/npapi/plugin_channel_host.h" | 34 #include "content/renderer/npapi/plugin_channel_host.h" |
| 34 #include "content/renderer/render_thread_impl.h" | 35 #include "content/renderer/render_thread_impl.h" |
| 35 #include "content/renderer/render_view_impl.h" | 36 #include "content/renderer/render_view_impl.h" |
| 36 #include "content/renderer/render_widget_fullscreen_pepper.h" | 37 #include "content/renderer/render_widget_fullscreen_pepper.h" |
| 37 #include "content/renderer/renderer_webapplicationcachehost_impl.h" | 38 #include "content/renderer/renderer_webapplicationcachehost_impl.h" |
| 38 #include "content/renderer/websharedworker_proxy.h" | 39 #include "content/renderer/websharedworker_proxy.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 is_swapped_out_(false), | 123 is_swapped_out_(false), |
| 123 is_detaching_(false) | 124 is_detaching_(false) |
| 124 #if defined(ENABLE_PLUGINS) | 125 #if defined(ENABLE_PLUGINS) |
| 125 , focused_pepper_plugin_(NULL), | 126 , focused_pepper_plugin_(NULL), |
| 126 pepper_last_mouse_event_target_(NULL) | 127 pepper_last_mouse_event_target_(NULL) |
| 127 #endif | 128 #endif |
| 128 { | 129 { |
| 129 } | 130 } |
| 130 | 131 |
| 131 RenderFrameImpl::~RenderFrameImpl() { | 132 RenderFrameImpl::~RenderFrameImpl() { |
| 133 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); |
| 134 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); |
| 132 } | 135 } |
| 133 | 136 |
| 134 RenderWidget* RenderFrameImpl::GetRenderWidget() { | 137 RenderWidget* RenderFrameImpl::GetRenderWidget() { |
| 135 return render_view_; | 138 return render_view_; |
| 136 } | 139 } |
| 137 | 140 |
| 138 #if defined(ENABLE_PLUGINS) | 141 #if defined(ENABLE_PLUGINS) |
| 139 void RenderFrameImpl::PepperInstanceCreated( | 142 void RenderFrameImpl::PepperInstanceCreated( |
| 140 PepperPluginInstanceImpl* instance) { | 143 PepperPluginInstanceImpl* instance) { |
| 141 active_pepper_instances_.insert(instance); | 144 active_pepper_instances_.insert(instance); |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 // Mimics the order of events sent by WebKit. | 419 // Mimics the order of events sent by WebKit. |
| 417 // See WebCore::Editor::setComposition() for the corresponding code. | 420 // See WebCore::Editor::setComposition() for the corresponding code. |
| 418 focused_pepper_plugin_->HandleCompositionEnd(last_text); | 421 focused_pepper_plugin_->HandleCompositionEnd(last_text); |
| 419 focused_pepper_plugin_->HandleTextInput(last_text); | 422 focused_pepper_plugin_->HandleTextInput(last_text); |
| 420 } | 423 } |
| 421 pepper_composition_text_.clear(); | 424 pepper_composition_text_.clear(); |
| 422 } | 425 } |
| 423 | 426 |
| 424 #endif // ENABLE_PLUGINS | 427 #endif // ENABLE_PLUGINS |
| 425 | 428 |
| 426 int RenderFrameImpl::GetRoutingID() const { | |
| 427 return routing_id_; | |
| 428 } | |
| 429 | |
| 430 bool RenderFrameImpl::Send(IPC::Message* message) { | 429 bool RenderFrameImpl::Send(IPC::Message* message) { |
| 431 if (is_detaching_ || | 430 if (is_detaching_ || |
| 432 ((is_swapped_out_ || render_view_->is_swapped_out()) && | 431 ((is_swapped_out_ || render_view_->is_swapped_out()) && |
| 433 !SwappedOutMessages::CanSendWhileSwappedOut(message))) { | 432 !SwappedOutMessages::CanSendWhileSwappedOut(message))) { |
| 434 delete message; | 433 delete message; |
| 435 return false; | 434 return false; |
| 436 } | 435 } |
| 437 | 436 |
| 438 return RenderThread::Get()->Send(message); | 437 return RenderThread::Get()->Send(message); |
| 439 } | 438 } |
| 440 | 439 |
| 441 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { | 440 bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { |
| 441 ObserverListBase<RenderFrameObserver>::Iterator it(observers_); |
| 442 RenderFrameObserver* observer; |
| 443 while ((observer = it.GetNext()) != NULL) { |
| 444 if (observer->OnMessageReceived(msg)) |
| 445 return true; |
| 446 } |
| 447 |
| 442 // TODO(ajwong): Fill in with message handlers as various components | 448 // TODO(ajwong): Fill in with message handlers as various components |
| 443 // are migrated over to understand frames. | 449 // are migrated over to understand frames. |
| 444 return false; | 450 return false; |
| 445 } | 451 } |
| 446 | 452 |
| 447 // blink::WebFrameClient implementation ------------------------------------- | 453 // blink::WebFrameClient implementation ------------------------------------- |
| 448 | 454 |
| 449 blink::WebPlugin* RenderFrameImpl::createPlugin( | 455 blink::WebPlugin* RenderFrameImpl::createPlugin( |
| 450 blink::WebFrame* frame, | 456 blink::WebFrame* frame, |
| 451 const blink::WebPluginParams& params) { | 457 const blink::WebPluginParams& params) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 | 529 |
| 524 blink::WebFrame* RenderFrameImpl::createChildFrame( | 530 blink::WebFrame* RenderFrameImpl::createChildFrame( |
| 525 blink::WebFrame* parent, | 531 blink::WebFrame* parent, |
| 526 const blink::WebString& name) { | 532 const blink::WebString& name) { |
| 527 RenderFrameImpl* child_render_frame = this; | 533 RenderFrameImpl* child_render_frame = this; |
| 528 long long child_frame_identifier = WebFrame::generateEmbedderIdentifier(); | 534 long long child_frame_identifier = WebFrame::generateEmbedderIdentifier(); |
| 529 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | 535 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { |
| 530 // Synchronously notify the browser of a child frame creation to get the | 536 // Synchronously notify the browser of a child frame creation to get the |
| 531 // routing_id for the RenderFrame. | 537 // routing_id for the RenderFrame. |
| 532 int routing_id; | 538 int routing_id; |
| 533 Send(new FrameHostMsg_CreateChildFrame(GetRoutingID(), | 539 Send(new FrameHostMsg_CreateChildFrame(routing_id_, |
| 534 parent->identifier(), | 540 parent->identifier(), |
| 535 child_frame_identifier, | 541 child_frame_identifier, |
| 536 UTF16ToUTF8(name), | 542 UTF16ToUTF8(name), |
| 537 &routing_id)); | 543 &routing_id)); |
| 538 child_render_frame = RenderFrameImpl::Create(render_view_, routing_id); | 544 child_render_frame = RenderFrameImpl::Create(render_view_, routing_id); |
| 539 } | 545 } |
| 540 | 546 |
| 541 blink::WebFrame* web_frame = WebFrame::create(child_render_frame, | 547 blink::WebFrame* web_frame = WebFrame::create(child_render_frame, |
| 542 child_frame_identifier); | 548 child_frame_identifier); |
| 543 | 549 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 556 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { | 562 void RenderFrameImpl::frameDetached(blink::WebFrame* frame) { |
| 557 // NOTE: This function is called on the frame that is being detached and not | 563 // NOTE: This function is called on the frame that is being detached and not |
| 558 // the parent frame. This is different from createChildFrame() which is | 564 // the parent frame. This is different from createChildFrame() which is |
| 559 // called on the parent frame. | 565 // called on the parent frame. |
| 560 CHECK(!is_detaching_); | 566 CHECK(!is_detaching_); |
| 561 | 567 |
| 562 int64 parent_frame_id = -1; | 568 int64 parent_frame_id = -1; |
| 563 if (frame->parent()) | 569 if (frame->parent()) |
| 564 parent_frame_id = frame->parent()->identifier(); | 570 parent_frame_id = frame->parent()->identifier(); |
| 565 | 571 |
| 566 Send(new FrameHostMsg_Detach(GetRoutingID(), parent_frame_id, | 572 Send(new FrameHostMsg_Detach(routing_id_, parent_frame_id, |
| 567 frame->identifier())); | 573 frame->identifier())); |
| 568 | 574 |
| 569 // Currently multiple WebCore::Frames can send frameDetached to a single | 575 // Currently multiple WebCore::Frames can send frameDetached to a single |
| 570 // RenderFrameImpl. This is legacy behavior from when RenderViewImpl served | 576 // RenderFrameImpl. This is legacy behavior from when RenderViewImpl served |
| 571 // as a shared WebFrameClient for multiple Webcore::Frame objects. It also | 577 // as a shared WebFrameClient for multiple Webcore::Frame objects. It also |
| 572 // prevents this class from entering the |is_detaching_| state because | 578 // prevents this class from entering the |is_detaching_| state because |
| 573 // even though one WebCore::Frame may have detached itself, others will | 579 // even though one WebCore::Frame may have detached itself, others will |
| 574 // still need to use this object. | 580 // still need to use this object. |
| 575 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { | 581 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess)) { |
| 576 // The |is_detaching_| flag disables Send(). FrameHostMsg_Detach must be | 582 // The |is_detaching_| flag disables Send(). FrameHostMsg_Detach must be |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1279 } | 1285 } |
| 1280 | 1286 |
| 1281 void RenderFrameImpl::didLoseWebGLContext(blink::WebFrame* frame, | 1287 void RenderFrameImpl::didLoseWebGLContext(blink::WebFrame* frame, |
| 1282 int arb_robustness_status_code) { | 1288 int arb_robustness_status_code) { |
| 1283 render_view_->Send(new ViewHostMsg_DidLose3DContext( | 1289 render_view_->Send(new ViewHostMsg_DidLose3DContext( |
| 1284 GURL(frame->top()->document().securityOrigin().toString()), | 1290 GURL(frame->top()->document().securityOrigin().toString()), |
| 1285 THREE_D_API_TYPE_WEBGL, | 1291 THREE_D_API_TYPE_WEBGL, |
| 1286 arb_robustness_status_code)); | 1292 arb_robustness_status_code)); |
| 1287 } | 1293 } |
| 1288 | 1294 |
| 1295 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { |
| 1296 observers_.AddObserver(observer); |
| 1297 } |
| 1298 |
| 1299 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
| 1300 observer->RenderFrameGone(); |
| 1301 observers_.RemoveObserver(observer); |
| 1302 } |
| 1303 |
| 1289 } // namespace content | 1304 } // namespace content |
| OLD | NEW |