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

Side by Side Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 12906011: Detect debugging target crash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 9 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/browser/devtools/renderer_overrides_handler.h" 5 #include "content/browser/devtools/renderer_overrides_handler.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/string16.h" 12 #include "base/string16.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "content/browser/child_process_security_policy_impl.h" 15 #include "content/browser/child_process_security_policy_impl.h"
16 #include "content/browser/devtools/devtools_protocol_constants.h"
16 #include "content/browser/renderer_host/render_view_host_delegate.h" 17 #include "content/browser/renderer_host/render_view_host_delegate.h"
17 #include "content/public/browser/devtools_agent_host.h" 18 #include "content/public/browser/devtools_agent_host.h"
18 #include "content/public/browser/javascript_dialog_manager.h" 19 #include "content/public/browser/javascript_dialog_manager.h"
19 #include "content/public/browser/navigation_controller.h" 20 #include "content/public/browser/navigation_controller.h"
20 #include "content/public/browser/render_process_host.h" 21 #include "content/public/browser/render_process_host.h"
21 #include "content/public/browser/render_view_host.h" 22 #include "content/public/browser/render_view_host.h"
22 #include "content/public/browser/web_contents.h" 23 #include "content/public/browser/web_contents.h"
23 #include "content/public/browser/web_contents_delegate.h" 24 #include "content/public/browser/web_contents_delegate.h"
24 #include "content/public/common/page_transition_types.h" 25 #include "content/public/common/page_transition_types.h"
25 #include "content/public/common/referrer.h" 26 #include "content/public/common/referrer.h"
26 #include "googleurl/src/gurl.h" 27 #include "googleurl/src/gurl.h"
27 28
29 namespace {
30 // This parameter does not exist in Inspector.json yet.
31 const char kPageHandleDialogPromptTextParam[] = "promptText";
pfeldman 2013/03/21 06:30:08 It should be there now.
Vladislav Kaznacheev 2013/03/21 07:24:02 Done.
32 }
33
28 namespace content { 34 namespace content {
29 35
30 namespace {
31
32 const char kDOMFileInputCommand[] = "DOM.setFileInputFiles";
33 const char kDOMFileInputFilesParam[] = "files";
34 const char kPageHandleDialogCommand[] = "Page.handleJavaScriptDialog";
35 const char kPageHandleDialogAcceptParam[] = "accept";
36 const char kPageHandleDialogPromptTextParam[] = "promptText";
37 const char kPageNavigateCommand[] = "Page.navigate";
38 const char kPageNavigateUrlParam[] = "url";
39
40 } // namespace
41
42 RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) 36 RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent)
43 : agent_(agent) { 37 : agent_(agent) {
44 RegisterCommandHandler( 38 RegisterCommandHandler(
45 kDOMFileInputCommand, 39 devtools::DOM::setFileInputFiles::kName,
46 base::Bind( 40 base::Bind(
47 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles, 41 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles,
48 base::Unretained(this))); 42 base::Unretained(this)));
49 RegisterCommandHandler( 43 RegisterCommandHandler(
50 kPageHandleDialogCommand, 44 devtools::Page::handleJavaScriptDialog::kName,
51 base::Bind( 45 base::Bind(
52 &RendererOverridesHandler::PageHandleJavaScriptDialog, 46 &RendererOverridesHandler::PageHandleJavaScriptDialog,
53 base::Unretained(this))); 47 base::Unretained(this)));
54 RegisterCommandHandler( 48 RegisterCommandHandler(
55 kPageNavigateCommand, 49 devtools::Page::navigate::kName,
56 base::Bind( 50 base::Bind(
57 &RendererOverridesHandler::PageNavigate, 51 &RendererOverridesHandler::PageNavigate,
58 base::Unretained(this))); 52 base::Unretained(this)));
59 } 53 }
60 54
61 RendererOverridesHandler::~RendererOverridesHandler() {} 55 RendererOverridesHandler::~RendererOverridesHandler() {}
62 56
63 scoped_ptr<DevToolsProtocol::Response> 57 scoped_ptr<DevToolsProtocol::Response>
64 RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( 58 RendererOverridesHandler::GrantPermissionsForSetFileInputFiles(
65 DevToolsProtocol::Command* command) { 59 DevToolsProtocol::Command* command) {
66 base::DictionaryValue* params = command->params(); 60 base::DictionaryValue* params = command->params();
67 base::ListValue* file_list; 61 base::ListValue* file_list;
68 if (!params || !params->GetList(kDOMFileInputFilesParam, &file_list)) { 62 const char* param =
63 devtools::DOM::setFileInputFiles::kParamFiles;
64 if (!params || !params->GetList(param, &file_list)) {
69 return command->ErrorResponse( 65 return command->ErrorResponse(
70 DevToolsProtocol::kErrorInvalidParams, 66 DevToolsProtocol::kErrorInvalidParams,
71 base::StringPrintf("Missing or invalid '%s' parameter", 67 base::StringPrintf("Missing or invalid '%s' parameter", param));
72 kDOMFileInputFilesParam));
73 } 68 }
74 RenderViewHost* host = agent_->GetRenderViewHost(); 69 RenderViewHost* host = agent_->GetRenderViewHost();
75 if (!host) 70 if (!host)
76 return scoped_ptr<DevToolsProtocol::Response>(); 71 return scoped_ptr<DevToolsProtocol::Response>();
77 72
78 for (size_t i = 0; i < file_list->GetSize(); ++i) { 73 for (size_t i = 0; i < file_list->GetSize(); ++i) {
79 base::FilePath::StringType file; 74 base::FilePath::StringType file;
80 if (!file_list->GetString(i, &file)) { 75 if (!file_list->GetString(i, &file)) {
81 return command->ErrorResponse( 76 return command->ErrorResponse(
82 DevToolsProtocol::kErrorInvalidParams, 77 DevToolsProtocol::kErrorInvalidParams,
83 base::StringPrintf("'%s' must be a list of strings", 78 base::StringPrintf("'%s' must be a list of strings", param));
84 kDOMFileInputFilesParam));
85 } 79 }
86 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( 80 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile(
87 host->GetProcess()->GetID(), base::FilePath(file)); 81 host->GetProcess()->GetID(), base::FilePath(file));
88 } 82 }
89 return scoped_ptr<DevToolsProtocol::Response>(); 83 return scoped_ptr<DevToolsProtocol::Response>();
90 } 84 }
91 85
92 scoped_ptr<DevToolsProtocol::Response> 86 scoped_ptr<DevToolsProtocol::Response>
93 RendererOverridesHandler::PageHandleJavaScriptDialog( 87 RendererOverridesHandler::PageHandleJavaScriptDialog(
94 DevToolsProtocol::Command* command) { 88 DevToolsProtocol::Command* command) {
95 base::DictionaryValue* params = command->params(); 89 base::DictionaryValue* params = command->params();
90 const char* paramAccept =
91 devtools::Page::handleJavaScriptDialog::kParamAccept;
96 bool accept; 92 bool accept;
97 if (!params || !params->GetBoolean(kPageHandleDialogAcceptParam, &accept)) { 93 if (!params || !params->GetBoolean(paramAccept, &accept)) {
98 return command->ErrorResponse( 94 return command->ErrorResponse(
99 DevToolsProtocol::kErrorInvalidParams, 95 DevToolsProtocol::kErrorInvalidParams,
100 base::StringPrintf("Missing or invalid '%s' parameter", 96 base::StringPrintf("Missing or invalid '%s' parameter", paramAccept));
101 kPageHandleDialogAcceptParam));
102 } 97 }
103 string16 prompt_override; 98 string16 prompt_override;
104 string16* prompt_override_ptr = &prompt_override; 99 string16* prompt_override_ptr = &prompt_override;
105 if (!params || !params->GetString(kPageHandleDialogPromptTextParam, 100 if (!params || !params->GetString(
106 prompt_override_ptr)) { 101 kPageHandleDialogPromptTextParam, prompt_override_ptr)) {
107 prompt_override_ptr = NULL; 102 prompt_override_ptr = NULL;
108 } 103 }
109 104
110 RenderViewHost* host = agent_->GetRenderViewHost(); 105 RenderViewHost* host = agent_->GetRenderViewHost();
111 if (host) { 106 if (host) {
112 WebContents* web_contents = host->GetDelegate()->GetAsWebContents(); 107 WebContents* web_contents = host->GetDelegate()->GetAsWebContents();
113 if (web_contents) { 108 if (web_contents) {
114 JavaScriptDialogManager* manager = 109 JavaScriptDialogManager* manager =
115 web_contents->GetDelegate()->GetJavaScriptDialogManager(); 110 web_contents->GetDelegate()->GetJavaScriptDialogManager();
116 if (manager && manager->HandleJavaScriptDialog( 111 if (manager && manager->HandleJavaScriptDialog(
117 web_contents, accept, prompt_override_ptr)) { 112 web_contents, accept, prompt_override_ptr)) {
118 return scoped_ptr<DevToolsProtocol::Response>(); 113 return scoped_ptr<DevToolsProtocol::Response>();
119 } 114 }
120 } 115 }
121 } 116 }
122 return command->ErrorResponse( 117 return command->ErrorResponse(
123 DevToolsProtocol::kErrorInternalError, 118 DevToolsProtocol::kErrorInternalError,
124 "No JavaScript dialog to handle"); 119 "No JavaScript dialog to handle");
125 } 120 }
126 121
127 scoped_ptr<DevToolsProtocol::Response> 122 scoped_ptr<DevToolsProtocol::Response>
128 RendererOverridesHandler::PageNavigate( 123 RendererOverridesHandler::PageNavigate(
129 DevToolsProtocol::Command* command) { 124 DevToolsProtocol::Command* command) {
130 base::DictionaryValue* params = command->params(); 125 base::DictionaryValue* params = command->params();
131 std::string url; 126 std::string url;
132 if (!params || !params->GetString(kPageNavigateUrlParam, &url)) { 127 const char* param = devtools::Page::navigate::kParamUrl;
128 if (!params || !params->GetString(param, &url)) {
133 return command->ErrorResponse( 129 return command->ErrorResponse(
134 DevToolsProtocol::kErrorInvalidParams, 130 DevToolsProtocol::kErrorInvalidParams,
135 base::StringPrintf("Missing or invalid '%s' parameter", 131 base::StringPrintf("Missing or invalid '%s' parameter",
136 kPageNavigateUrlParam)); 132 param));
137 } 133 }
138 GURL gurl(url); 134 GURL gurl(url);
139 if (!gurl.is_valid()) { 135 if (!gurl.is_valid()) {
140 return command->ErrorResponse( 136 return command->ErrorResponse(
141 DevToolsProtocol::kErrorInternalError, 137 DevToolsProtocol::kErrorInternalError,
142 "Cannot navigate to invalid URL"); 138 "Cannot navigate to invalid URL");
143 } 139 }
144 RenderViewHost* host = agent_->GetRenderViewHost(); 140 RenderViewHost* host = agent_->GetRenderViewHost();
145 if (host) { 141 if (host) {
146 WebContents* web_contents = host->GetDelegate()->GetAsWebContents(); 142 WebContents* web_contents = host->GetDelegate()->GetAsWebContents();
147 if (web_contents) { 143 if (web_contents) {
148 web_contents->GetController().LoadURL( 144 web_contents->GetController().LoadURL(
149 gurl, Referrer(), PAGE_TRANSITION_TYPED, ""); 145 gurl, Referrer(), PAGE_TRANSITION_TYPED, "");
150 return command->SuccessResponse(new base::DictionaryValue()); 146 return command->SuccessResponse(new base::DictionaryValue());
151 } 147 }
152 } 148 }
153 return command->ErrorResponse( 149 return command->ErrorResponse(
154 DevToolsProtocol::kErrorInternalError, 150 DevToolsProtocol::kErrorInternalError,
155 "No WebContents to navigate"); 151 "No WebContents to navigate");
156 } 152 }
157 153
158 } // namespace content 154 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698