OLD | NEW |
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/browser/devtools/render_frame_devtools_agent_host.h" | 5 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
6 | 6 |
7 #include <tuple> | 7 #include <tuple> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
| 10 #include "base/guid.h" |
10 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
11 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
12 #include "build/build_config.h" | 13 #include "build/build_config.h" |
13 #include "content/browser/bad_message.h" | 14 #include "content/browser/bad_message.h" |
14 #include "content/browser/child_process_security_policy_impl.h" | 15 #include "content/browser/child_process_security_policy_impl.h" |
15 #include "content/browser/devtools/devtools_frame_trace_recorder.h" | 16 #include "content/browser/devtools/devtools_frame_trace_recorder.h" |
| 17 #include "content/browser/devtools/devtools_manager.h" |
16 #include "content/browser/devtools/devtools_protocol_handler.h" | 18 #include "content/browser/devtools/devtools_protocol_handler.h" |
17 #include "content/browser/devtools/page_navigation_throttle.h" | 19 #include "content/browser/devtools/page_navigation_throttle.h" |
18 #include "content/browser/devtools/protocol/browser_handler.h" | 20 #include "content/browser/devtools/protocol/browser_handler.h" |
19 #include "content/browser/devtools/protocol/dom_handler.h" | 21 #include "content/browser/devtools/protocol/dom_handler.h" |
20 #include "content/browser/devtools/protocol/emulation_handler.h" | 22 #include "content/browser/devtools/protocol/emulation_handler.h" |
21 #include "content/browser/devtools/protocol/input_handler.h" | 23 #include "content/browser/devtools/protocol/input_handler.h" |
22 #include "content/browser/devtools/protocol/inspector_handler.h" | 24 #include "content/browser/devtools/protocol/inspector_handler.h" |
23 #include "content/browser/devtools/protocol/io_handler.h" | 25 #include "content/browser/devtools/protocol/io_handler.h" |
24 #include "content/browser/devtools/protocol/network_handler.h" | 26 #include "content/browser/devtools/protocol/network_handler.h" |
25 #include "content/browser/devtools/protocol/page_handler.h" | 27 #include "content/browser/devtools/protocol/page_handler.h" |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 // main frame. | 365 // main frame. |
364 if (agent_host && agent_host->page_handler_) { | 366 if (agent_host && agent_host->page_handler_) { |
365 return agent_host->page_handler_->CreateThrottleForNavigation( | 367 return agent_host->page_handler_->CreateThrottleForNavigation( |
366 navigation_handle); | 368 navigation_handle); |
367 } | 369 } |
368 return nullptr; | 370 return nullptr; |
369 } | 371 } |
370 | 372 |
371 RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( | 373 RenderFrameDevToolsAgentHost::RenderFrameDevToolsAgentHost( |
372 RenderFrameHostImpl* host) | 374 RenderFrameHostImpl* host) |
373 : browser_handler_(new devtools::browser::BrowserHandler()), | 375 : DevToolsAgentHostImpl(base::GenerateGUID()), |
| 376 browser_handler_(new devtools::browser::BrowserHandler()), |
374 dom_handler_(new devtools::dom::DOMHandler()), | 377 dom_handler_(new devtools::dom::DOMHandler()), |
375 input_handler_(new devtools::input::InputHandler()), | 378 input_handler_(new devtools::input::InputHandler()), |
376 inspector_handler_(new devtools::inspector::InspectorHandler()), | 379 inspector_handler_(new devtools::inspector::InspectorHandler()), |
377 io_handler_(new devtools::io::IOHandler(GetIOContext())), | 380 io_handler_(new devtools::io::IOHandler(GetIOContext())), |
378 network_handler_(new devtools::network::NetworkHandler()), | 381 network_handler_(new devtools::network::NetworkHandler()), |
379 page_handler_(nullptr), | 382 page_handler_(nullptr), |
380 schema_handler_(new devtools::schema::SchemaHandler()), | 383 schema_handler_(new devtools::schema::SchemaHandler()), |
381 security_handler_(nullptr), | 384 security_handler_(nullptr), |
382 service_worker_handler_( | 385 service_worker_handler_( |
383 new devtools::service_worker::ServiceWorkerHandler()), | 386 new devtools::service_worker::ServiceWorkerHandler()), |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
853 RenderFrameHostImpl* host = | 856 RenderFrameHostImpl* host = |
854 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame()); | 857 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame()); |
855 DCHECK(host); | 858 DCHECK(host); |
856 frame_tree_node_ = host->frame_tree_node(); | 859 frame_tree_node_ = host->frame_tree_node(); |
857 current_ = std::move(disconnected_); | 860 current_ = std::move(disconnected_); |
858 SetPending(host); | 861 SetPending(host); |
859 CommitPending(); | 862 CommitPending(); |
860 WebContentsObserver::Observe(WebContents::FromRenderFrameHost(host)); | 863 WebContentsObserver::Observe(WebContents::FromRenderFrameHost(host)); |
861 } | 864 } |
862 | 865 |
863 DevToolsAgentHost::Type RenderFrameDevToolsAgentHost::GetType() { | 866 std::string RenderFrameDevToolsAgentHost::GetParentId() { |
864 return IsChildFrame() ? TYPE_FRAME : TYPE_WEB_CONTENTS; | 867 if (IsChildFrame()) { |
| 868 RenderFrameHostImpl* frame_host = current_->host(); |
| 869 while (frame_host && !ShouldCreateDevToolsFor(frame_host)) |
| 870 frame_host = frame_host->GetParent(); |
| 871 if (frame_host) |
| 872 return DevToolsAgentHost::GetOrCreateFor(frame_host)->GetId(); |
| 873 } |
| 874 |
| 875 WebContentsImpl* contents = static_cast<WebContentsImpl*>(web_contents()); |
| 876 if (!contents) |
| 877 return ""; |
| 878 contents = contents->GetOuterWebContents(); |
| 879 if (contents) |
| 880 return DevToolsAgentHost::GetOrCreateFor(contents)->GetId(); |
| 881 return ""; |
| 882 } |
| 883 |
| 884 std::string RenderFrameDevToolsAgentHost::GetType() { |
| 885 DevToolsManager* manager = DevToolsManager::GetInstance(); |
| 886 if (manager->delegate()) |
| 887 return manager->delegate()->GetTargetType(current_->host()); |
| 888 return kTypeOther; |
865 } | 889 } |
866 | 890 |
867 std::string RenderFrameDevToolsAgentHost::GetTitle() { | 891 std::string RenderFrameDevToolsAgentHost::GetTitle() { |
868 if (IsChildFrame()) | 892 DevToolsManager* manager = DevToolsManager::GetInstance(); |
869 return GetURL().spec(); | 893 std::string result; |
870 if (WebContents* web_contents = GetWebContents()) | 894 if (manager->delegate()) |
871 return base::UTF16ToUTF8(web_contents->GetTitle()); | 895 result = manager->delegate()->GetTargetTitle(current_->host()); |
| 896 if (!result.empty()) |
| 897 return result; |
| 898 content::WebContents* web_contents = GetWebContents(); |
| 899 if (web_contents) |
| 900 result = base::UTF16ToUTF8(web_contents->GetTitle()); |
| 901 return GetURL().spec(); |
| 902 } |
| 903 |
| 904 std::string RenderFrameDevToolsAgentHost::GetDescription() { |
872 return ""; | 905 return ""; |
873 } | 906 } |
874 | 907 |
875 GURL RenderFrameDevToolsAgentHost::GetURL() { | 908 GURL RenderFrameDevToolsAgentHost::GetURL() { |
876 // Order is important here. | 909 // Order is important here. |
877 WebContents* web_contents = GetWebContents(); | 910 WebContents* web_contents = GetWebContents(); |
878 if (web_contents && !IsChildFrame()) | 911 if (web_contents && !IsChildFrame()) |
879 return web_contents->GetVisibleURL(); | 912 return web_contents->GetVisibleURL(); |
880 if (pending_) | 913 if (pending_) |
881 return pending_->host()->GetLastCommittedURL(); | 914 return pending_->host()->GetLastCommittedURL(); |
882 if (current_) | 915 if (current_) |
883 return current_->host()->GetLastCommittedURL(); | 916 return current_->host()->GetLastCommittedURL(); |
884 return GURL(); | 917 return GURL(); |
885 } | 918 } |
886 | 919 |
| 920 GURL RenderFrameDevToolsAgentHost::GetFaviconURL() { |
| 921 return GURL(); |
| 922 } |
| 923 |
887 bool RenderFrameDevToolsAgentHost::Activate() { | 924 bool RenderFrameDevToolsAgentHost::Activate() { |
888 WebContentsImpl* wc = static_cast<WebContentsImpl*>(web_contents()); | 925 WebContentsImpl* wc = static_cast<WebContentsImpl*>(web_contents()); |
889 if (wc) { | 926 if (wc) { |
890 wc->Activate(); | 927 wc->Activate(); |
891 return true; | 928 return true; |
892 } | 929 } |
893 return false; | 930 return false; |
894 } | 931 } |
895 | 932 |
| 933 void RenderFrameDevToolsAgentHost::Reload() { |
| 934 WebContentsImpl* wc = static_cast<WebContentsImpl*>(web_contents()); |
| 935 if (wc) |
| 936 wc->GetController().Reload(true); |
| 937 } |
| 938 |
896 bool RenderFrameDevToolsAgentHost::Close() { | 939 bool RenderFrameDevToolsAgentHost::Close() { |
897 if (web_contents()) { | 940 if (web_contents()) { |
898 web_contents()->ClosePage(); | 941 web_contents()->ClosePage(); |
899 return true; | 942 return true; |
900 } | 943 } |
901 return false; | 944 return false; |
902 } | 945 } |
903 | 946 |
| 947 base::TimeTicks RenderFrameDevToolsAgentHost::GetLastActivityTime() { |
| 948 if (content::WebContents* contents = web_contents()) |
| 949 return contents->GetLastActiveTime(); |
| 950 return base::TimeTicks(); |
| 951 } |
| 952 |
904 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame( | 953 void RenderFrameDevToolsAgentHost::OnSwapCompositorFrame( |
905 const IPC::Message& message) { | 954 const IPC::Message& message) { |
906 ViewHostMsg_SwapCompositorFrame::Param param; | 955 ViewHostMsg_SwapCompositorFrame::Param param; |
907 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, ¶m)) | 956 if (!ViewHostMsg_SwapCompositorFrame::Read(&message, ¶m)) |
908 return; | 957 return; |
909 if (page_handler_) | 958 if (page_handler_) |
910 page_handler_->OnSwapCompositorFrame( | 959 page_handler_->OnSwapCompositorFrame( |
911 std::move(std::get<1>(param).metadata)); | 960 std::move(std::get<1>(param).metadata)); |
912 if (input_handler_) | 961 if (input_handler_) |
913 input_handler_->OnSwapCompositorFrame(std::get<1>(param).metadata); | 962 input_handler_->OnSwapCompositorFrame(std::get<1>(param).metadata); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 void RenderFrameDevToolsAgentHost::OnRequestNewWindow( | 997 void RenderFrameDevToolsAgentHost::OnRequestNewWindow( |
949 RenderFrameHost* sender, | 998 RenderFrameHost* sender, |
950 int new_routing_id) { | 999 int new_routing_id) { |
951 RenderFrameHostImpl* frame_host = RenderFrameHostImpl::FromID( | 1000 RenderFrameHostImpl* frame_host = RenderFrameHostImpl::FromID( |
952 sender->GetProcess()->GetID(), new_routing_id); | 1001 sender->GetProcess()->GetID(), new_routing_id); |
953 | 1002 |
954 bool success = false; | 1003 bool success = false; |
955 if (IsAttached() && sender->GetRoutingID() != new_routing_id && frame_host) { | 1004 if (IsAttached() && sender->GetRoutingID() != new_routing_id && frame_host) { |
956 scoped_refptr<DevToolsAgentHost> agent = | 1005 scoped_refptr<DevToolsAgentHost> agent = |
957 DevToolsAgentHost::GetOrCreateFor(frame_host); | 1006 DevToolsAgentHost::GetOrCreateFor(frame_host); |
958 success = static_cast<DevToolsAgentHostImpl*>(agent.get())-> | 1007 success = agent->Inspect(); |
959 Inspect(agent->GetBrowserContext()); | |
960 } | 1008 } |
961 | 1009 |
962 sender->Send(new DevToolsAgentMsg_RequestNewWindow_ACK( | 1010 sender->Send(new DevToolsAgentMsg_RequestNewWindow_ACK( |
963 sender->GetRoutingID(), success)); | 1011 sender->GetRoutingID(), success)); |
964 } | 1012 } |
965 | 1013 |
966 bool RenderFrameDevToolsAgentHost::HasRenderFrameHost( | 1014 bool RenderFrameDevToolsAgentHost::HasRenderFrameHost( |
967 RenderFrameHost* host) { | 1015 RenderFrameHost* host) { |
968 return (current_ && current_->host() == host) || | 1016 return (current_ && current_->host() == host) || |
969 (pending_ && pending_->host() == host); | 1017 (pending_ && pending_->host() == host); |
970 } | 1018 } |
971 | 1019 |
972 bool RenderFrameDevToolsAgentHost::IsChildFrame() { | 1020 bool RenderFrameDevToolsAgentHost::IsChildFrame() { |
973 return current_ && current_->host()->GetParent(); | 1021 return current_ && current_->host()->GetParent(); |
974 } | 1022 } |
975 | 1023 |
976 } // namespace content | 1024 } // namespace content |
OLD | NEW |