Chromium Code Reviews| Index: content/renderer/render_view_impl.cc |
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
| index d9a9d022e72aec08145befd022df7035e747901a..3866a2fd922da2fe30d427fc023265e7465d16c3 100644 |
| --- a/content/renderer/render_view_impl.cc |
| +++ b/content/renderer/render_view_impl.cc |
| @@ -71,7 +71,6 @@ |
| #include "content/public/renderer/render_view_visitor.h" |
| #include "content/renderer/browser_plugin/browser_plugin.h" |
| #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
| -#include "content/renderer/devtools/devtools_agent.h" |
| #include "content/renderer/disambiguation_popup_helper.h" |
| #include "content/renderer/dom_storage/webstoragenamespace_impl.h" |
| #include "content/renderer/drop_data_builder.h" |
| @@ -416,6 +415,12 @@ static void ConvertToFaviconSizes( |
| sizes->push_back(gfx::Size(web_sizes[i])); |
| } |
| +static blink::WebDevToolsAgent* GetWebDevToolsAgent(WebView* webview) { |
| + if (!webview || !webview->mainFrame()->isWebLocalFrame()) |
| + return nullptr; |
| + return webview->mainFrame()->toWebLocalFrame()->devToolsAgent(); |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| struct RenderViewImpl::PendingFileChooser { |
| @@ -637,7 +642,6 @@ RenderViewImpl::RenderViewImpl(const ViewMsg_New_Params& params) |
| #endif |
| has_scrolled_focused_editable_node_into_rect_(false), |
| speech_recognition_dispatcher_(NULL), |
| - devtools_agent_(NULL), |
| mouse_lock_dispatcher_(NULL), |
| #if defined(OS_ANDROID) |
| expected_content_intent_id_(0), |
| @@ -747,6 +751,10 @@ void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, |
| } else { |
| webview()->setMainFrame(main_render_frame_->GetWebFrame()); |
| } |
| + // Here we have |main_render_frame_|, which does not really have blink::Frame |
| + // instance inside, and creating DevToolsAgent fails with assertions. |
| + // This happens because WebView receives WebRemoteFrame as a main frame, |
| + // but |main_render_frame_| still points to WebLocalFrame instance. |
| main_render_frame_->Initialize(); |
|
dgozman
2015/03/25 16:25:50
This causes crash for me. See comment above. Any i
|
| if (switches::IsTouchDragDropEnabled()) |
| @@ -775,14 +783,14 @@ void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, |
| new TextInputClientObserver(this); |
| #endif // defined(OS_MACOSX) |
| - // The next group of objects all implement RenderViewObserver, so are deleted |
| - // along with the RenderView automatically. |
| - if (!proxy) { |
| - devtools_agent_ = new DevToolsAgent(main_render_frame_.get()); |
| + // TODO(dgozman): do this not for main frame, but for local frame roots. |
| + if (blink::WebDevToolsAgent* devToolsAgent = GetWebDevToolsAgent(webview())) { |
| if (RenderWidgetCompositor* rwc = compositor()) |
| - webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId()); |
| + devToolsAgent->setLayerTreeId(rwc->GetLayerTreeId()); |
| } |
| + // The next group of objects all implement RenderViewObserver, so are deleted |
| + // along with the RenderView automatically. |
| mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this); |
| history_controller_.reset(new HistoryController(this)); |
| @@ -2021,8 +2029,9 @@ void RenderViewImpl::initializeLayerTreeView() { |
| RenderWidgetCompositor* rwc = compositor(); |
| if (!rwc) |
| return; |
| - if (webview() && webview()->devToolsAgent()) |
| - webview()->devToolsAgent()->setLayerTreeId(rwc->GetLayerTreeId()); |
| + // TODO(dgozman): do this not for main frame, but for local frame roots. |
| + if (blink::WebDevToolsAgent* devToolsAgent = GetWebDevToolsAgent(webview())) |
| + devToolsAgent->setLayerTreeId(rwc->GetLayerTreeId()); |
| bool use_threaded_event_handling = true; |
| #if defined(OS_MACOSX) && !defined(OS_IOS) |