| 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 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 } | 998 } |
| 999 | 999 |
| 1000 // RenderFrameImpl ---------------------------------------------------------- | 1000 // RenderFrameImpl ---------------------------------------------------------- |
| 1001 RenderFrameImpl::RenderFrameImpl(const CreateParams& params) | 1001 RenderFrameImpl::RenderFrameImpl(const CreateParams& params) |
| 1002 : frame_(NULL), | 1002 : frame_(NULL), |
| 1003 is_main_frame_(true), | 1003 is_main_frame_(true), |
| 1004 in_browser_initiated_detach_(false), | 1004 in_browser_initiated_detach_(false), |
| 1005 in_frame_tree_(false), | 1005 in_frame_tree_(false), |
| 1006 render_view_(params.render_view->AsWeakPtr()), | 1006 render_view_(params.render_view->AsWeakPtr()), |
| 1007 routing_id_(params.routing_id), | 1007 routing_id_(params.routing_id), |
| 1008 render_frame_proxy_(NULL), | |
| 1009 is_detaching_(false), | 1008 is_detaching_(false), |
| 1010 proxy_routing_id_(MSG_ROUTING_NONE), | 1009 proxy_routing_id_(MSG_ROUTING_NONE), |
| 1011 #if defined(ENABLE_PLUGINS) | 1010 #if defined(ENABLE_PLUGINS) |
| 1012 plugin_power_saver_helper_(nullptr), | 1011 plugin_power_saver_helper_(nullptr), |
| 1013 plugin_find_handler_(nullptr), | 1012 plugin_find_handler_(nullptr), |
| 1014 #endif | 1013 #endif |
| 1015 cookie_jar_(this), | 1014 cookie_jar_(this), |
| 1016 selection_text_offset_(0), | 1015 selection_text_offset_(0), |
| 1017 selection_range_(gfx::Range::InvalidRange()), | 1016 selection_range_(gfx::Range::InvalidRange()), |
| 1018 handling_select_range_(false), | 1017 handling_select_range_(false), |
| (...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1568 // Synchronously run the unload handler before sending the ACK. | 1567 // Synchronously run the unload handler before sending the ACK. |
| 1569 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support | 1568 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support |
| 1570 // unload on subframes as well. | 1569 // unload on subframes as well. |
| 1571 if (is_main_frame_) | 1570 if (is_main_frame_) |
| 1572 frame_->dispatchUnloadEvent(); | 1571 frame_->dispatchUnloadEvent(); |
| 1573 | 1572 |
| 1574 // Swap out and stop sending any IPC messages that are not ACKs. | 1573 // Swap out and stop sending any IPC messages that are not ACKs. |
| 1575 if (is_main_frame_) | 1574 if (is_main_frame_) |
| 1576 render_view_->SetSwappedOut(true); | 1575 render_view_->SetSwappedOut(true); |
| 1577 | 1576 |
| 1578 // Set the proxy here, since OnStop() below could cause an onload event | |
| 1579 // handler to execute, which could trigger code such as | |
| 1580 // willCheckAndDispatchMessageEvent() that needs the proxy. | |
| 1581 set_render_frame_proxy(proxy); | |
| 1582 | |
| 1583 // Transfer settings such as initial drawing parameters to the remote frame, | 1577 // Transfer settings such as initial drawing parameters to the remote frame, |
| 1584 // if one is created, that will replace this frame. | 1578 // if one is created, that will replace this frame. |
| 1585 if (!is_main_frame_) | 1579 if (!is_main_frame_) |
| 1586 proxy->web_frame()->initializeFromFrame(frame_); | 1580 proxy->web_frame()->initializeFromFrame(frame_); |
| 1587 | 1581 |
| 1588 // Let WebKit know that this view is hidden so it can drop resources and | 1582 // Let WebKit know that this view is hidden so it can drop resources and |
| 1589 // stop compositing. | 1583 // stop compositing. |
| 1590 // TODO(creis): Support this for subframes as well. | 1584 // TODO(creis): Support this for subframes as well. |
| 1591 if (is_main_frame_) { | 1585 if (is_main_frame_) { |
| 1592 render_view_->webview()->setVisibilityState( | 1586 render_view_->webview()->setVisibilityState( |
| (...skipping 2561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4154 } | 4148 } |
| 4155 return web_encrypted_media_client_.get(); | 4149 return web_encrypted_media_client_.get(); |
| 4156 } | 4150 } |
| 4157 | 4151 |
| 4158 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() { | 4152 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() { |
| 4159 if (!midi_dispatcher_) | 4153 if (!midi_dispatcher_) |
| 4160 midi_dispatcher_ = new MidiDispatcher(this); | 4154 midi_dispatcher_ = new MidiDispatcher(this); |
| 4161 return midi_dispatcher_; | 4155 return midi_dispatcher_; |
| 4162 } | 4156 } |
| 4163 | 4157 |
| 4164 bool RenderFrameImpl::willCheckAndDispatchMessageEvent( | |
| 4165 blink::WebLocalFrame* source_frame, | |
| 4166 blink::WebFrame* target_frame, | |
| 4167 blink::WebSecurityOrigin target_origin, | |
| 4168 blink::WebDOMMessageEvent event) { | |
| 4169 DCHECK(!frame_ || frame_ == target_frame); | |
| 4170 | |
| 4171 // TODO(alexmos, nasko): When swapped-out:// disappears, this should be | |
| 4172 // cleaned up so that RenderFrameProxy::postMessageEvent is the only path for | |
| 4173 // cross-process postMessages. | |
| 4174 | |
| 4175 // It is possible to get here on a swapped-out frame without a | |
| 4176 // |render_frame_proxy_|. This happens when: | |
| 4177 // - This process only has one active RenderView and is about to go away | |
| 4178 // (e.g., due to cross-process navigation). | |
| 4179 // - The top frame has a subframe with an unload handler. | |
| 4180 // - The subframe sends a postMessage to the top-level frame in its unload | |
| 4181 // handler. | |
| 4182 // See https://crbug.com/475651 for details. We return false here, since we | |
| 4183 // don't want to deliver the message to the new process in this case. | |
| 4184 if (!render_frame_proxy_) | |
| 4185 return false; | |
| 4186 | |
| 4187 render_frame_proxy_->postMessageEvent( | |
| 4188 source_frame, render_frame_proxy_->web_frame(), target_origin, event); | |
| 4189 return true; | |
| 4190 } | |
| 4191 | |
| 4192 blink::WebString RenderFrameImpl::userAgentOverride() { | 4158 blink::WebString RenderFrameImpl::userAgentOverride() { |
| 4193 if (!render_view_->webview() || !render_view_->webview()->mainFrame() || | 4159 if (!render_view_->webview() || !render_view_->webview()->mainFrame() || |
| 4194 render_view_->renderer_preferences_.user_agent_override.empty()) { | 4160 render_view_->renderer_preferences_.user_agent_override.empty()) { |
| 4195 return blink::WebString(); | 4161 return blink::WebString(); |
| 4196 } | 4162 } |
| 4197 | 4163 |
| 4198 // TODO(nasko): When the top-level frame is remote, there is no WebDataSource | 4164 // TODO(nasko): When the top-level frame is remote, there is no WebDataSource |
| 4199 // associated with it, so the checks below are not valid. Temporarily | 4165 // associated with it, so the checks below are not valid. Temporarily |
| 4200 // return early and fix properly as part of https://crbug.com/426555. | 4166 // return early and fix properly as part of https://crbug.com/426555. |
| 4201 if (render_view_->webview()->mainFrame()->isWebRemoteFrame()) | 4167 if (render_view_->webview()->mainFrame()->isWebRemoteFrame()) |
| (...skipping 1942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6144 // event target. Potentially a Pepper plugin will receive the event. | 6110 // event target. Potentially a Pepper plugin will receive the event. |
| 6145 // In order to tell whether a plugin gets the last mouse event and which it | 6111 // In order to tell whether a plugin gets the last mouse event and which it |
| 6146 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets | 6112 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets |
| 6147 // the event, it will notify us via DidReceiveMouseEvent() and set itself as | 6113 // the event, it will notify us via DidReceiveMouseEvent() and set itself as |
| 6148 // |pepper_last_mouse_event_target_|. | 6114 // |pepper_last_mouse_event_target_|. |
| 6149 pepper_last_mouse_event_target_ = nullptr; | 6115 pepper_last_mouse_event_target_ = nullptr; |
| 6150 #endif | 6116 #endif |
| 6151 } | 6117 } |
| 6152 | 6118 |
| 6153 } // namespace content | 6119 } // namespace content |
| OLD | NEW |