Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "headless/lib/browser/headless_devtools_manager_delegate.h" | 5 #include "headless/lib/browser/headless_devtools_manager_delegate.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| 11 #include "content/public/browser/devtools_agent_host.h" | 11 #include "content/public/browser/devtools_agent_host.h" |
| 12 #include "content/public/browser/devtools_frontend_host.h" | 12 #include "content/public/browser/devtools_frontend_host.h" |
| 13 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 14 #include "headless/grit/headless_lib_resources.h" | 14 #include "headless/grit/headless_lib_resources.h" |
| 15 #include "headless/lib/browser/headless_browser_context_impl.h" | 15 #include "headless/lib/browser/headless_browser_context_impl.h" |
| 16 #include "headless/lib/browser/headless_browser_impl.h" | 16 #include "headless/lib/browser/headless_browser_impl.h" |
| 17 #include "headless/lib/browser/headless_print_manager.h" | |
| 18 #include "headless/lib/browser/headless_web_contents_impl.h" | 17 #include "headless/lib/browser/headless_web_contents_impl.h" |
| 19 #include "headless/public/devtools/domains/target.h" | 18 #include "headless/public/devtools/domains/target.h" |
| 19 #include "printing/features/features.h" | |
| 20 #include "ui/base/resource/resource_bundle.h" | 20 #include "ui/base/resource/resource_bundle.h" |
| 21 | 21 |
| 22 #if BUILDFLAG(ENABLE_BASIC_PRINTING) | |
| 23 #include "headless/lib/browser/headless_print_manager.h" | |
| 24 #endif | |
| 25 | |
| 22 namespace headless { | 26 namespace headless { |
| 23 | 27 |
| 24 namespace { | 28 namespace { |
| 25 const char kIdParam[] = "id"; | 29 const char kIdParam[] = "id"; |
| 26 const char kResultParam[] = "result"; | 30 const char kResultParam[] = "result"; |
| 27 const char kErrorParam[] = "error"; | 31 const char kErrorParam[] = "error"; |
| 28 const char kErrorCodeParam[] = "code"; | 32 const char kErrorCodeParam[] = "code"; |
| 29 const char kErrorMessageParam[] = "message"; | 33 const char kErrorMessageParam[] = "message"; |
| 30 | 34 |
| 31 // JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object | 35 // JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 61 } | 65 } |
| 62 | 66 |
| 63 std::unique_ptr<base::DictionaryValue> CreateInvalidParamResponse( | 67 std::unique_ptr<base::DictionaryValue> CreateInvalidParamResponse( |
| 64 int command_id, | 68 int command_id, |
| 65 const std::string& param) { | 69 const std::string& param) { |
| 66 return CreateErrorResponse( | 70 return CreateErrorResponse( |
| 67 command_id, kErrorInvalidParam, | 71 command_id, kErrorInvalidParam, |
| 68 base::StringPrintf("Missing or invalid '%s' parameter", param.c_str())); | 72 base::StringPrintf("Missing or invalid '%s' parameter", param.c_str())); |
| 69 } | 73 } |
| 70 | 74 |
| 75 #if BUILDFLAG(ENABLE_BASIC_PRINTING) | |
| 71 void PDFCreated( | 76 void PDFCreated( |
| 72 const content::DevToolsManagerDelegate::CommandCallback& callback, | 77 const content::DevToolsManagerDelegate::CommandCallback& callback, |
| 73 int command_id, | 78 int command_id, |
| 74 printing::HeadlessPrintManager::PrintResult print_result, | 79 printing::HeadlessPrintManager::PrintResult print_result, |
| 75 const std::string& data) { | 80 const std::string& data) { |
| 76 std::unique_ptr<base::DictionaryValue> response; | 81 std::unique_ptr<base::DictionaryValue> response; |
| 77 if (print_result == printing::HeadlessPrintManager::PRINT_SUCCESS) { | 82 if (print_result == printing::HeadlessPrintManager::PRINT_SUCCESS) { |
| 78 response = CreateSuccessResponse( | 83 response = CreateSuccessResponse( |
| 79 command_id, | 84 command_id, |
| 80 printing::HeadlessPrintManager::PDFContentsToDictionaryValue(data)); | 85 printing::HeadlessPrintManager::PDFContentsToDictionaryValue(data)); |
| 81 } else { | 86 } else { |
| 82 response = CreateErrorResponse( | 87 response = CreateErrorResponse( |
| 83 command_id, kErrorServerError, | 88 command_id, kErrorServerError, |
| 84 printing::HeadlessPrintManager::PrintResultToString(print_result)); | 89 printing::HeadlessPrintManager::PrintResultToString(print_result)); |
| 85 } | 90 } |
| 86 callback.Run(std::move(response)); | 91 callback.Run(std::move(response)); |
| 87 } | 92 } |
| 93 #endif | |
| 88 | 94 |
| 89 } // namespace | 95 } // namespace |
| 90 | 96 |
| 91 HeadlessDevToolsManagerDelegate::HeadlessDevToolsManagerDelegate( | 97 HeadlessDevToolsManagerDelegate::HeadlessDevToolsManagerDelegate( |
| 92 base::WeakPtr<HeadlessBrowserImpl> browser) | 98 base::WeakPtr<HeadlessBrowserImpl> browser) |
| 93 : browser_(std::move(browser)) { | 99 : browser_(std::move(browser)) { |
| 94 command_map_["Target.createTarget"] = base::Bind( | 100 command_map_["Target.createTarget"] = base::Bind( |
| 95 &HeadlessDevToolsManagerDelegate::CreateTarget, base::Unretained(this)); | 101 &HeadlessDevToolsManagerDelegate::CreateTarget, base::Unretained(this)); |
| 96 command_map_["Target.closeTarget"] = base::Bind( | 102 command_map_["Target.closeTarget"] = base::Bind( |
| 97 &HeadlessDevToolsManagerDelegate::CloseTarget, base::Unretained(this)); | 103 &HeadlessDevToolsManagerDelegate::CloseTarget, base::Unretained(this)); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 176 std::string HeadlessDevToolsManagerDelegate::GetFrontendResource( | 182 std::string HeadlessDevToolsManagerDelegate::GetFrontendResource( |
| 177 const std::string& path) { | 183 const std::string& path) { |
| 178 return content::DevToolsFrontendHost::GetFrontendResource(path).as_string(); | 184 return content::DevToolsFrontendHost::GetFrontendResource(path).as_string(); |
| 179 } | 185 } |
| 180 | 186 |
| 181 void HeadlessDevToolsManagerDelegate::PrintToPDF( | 187 void HeadlessDevToolsManagerDelegate::PrintToPDF( |
| 182 content::DevToolsAgentHost* agent_host, | 188 content::DevToolsAgentHost* agent_host, |
| 183 int command_id, | 189 int command_id, |
| 184 const base::DictionaryValue* params, | 190 const base::DictionaryValue* params, |
| 185 const CommandCallback& callback) { | 191 const CommandCallback& callback) { |
| 192 #if !BUILDFLAG(ENABLE_BASIC_PRINTING) | |
|
Lei Zhang
2017/04/10 17:38:41
Maybe remove the '!' and swap the two bodies of co
jzfeng
2017/04/10 18:32:27
Done.
| |
| 193 DCHECK(callback); | |
| 194 callback.Run(CreateErrorResponse(command_id, kErrorServerError, | |
| 195 "Can't print to pdf. Please set " | |
| 196 "enable_basic_printing to true in " | |
| 197 "args.gn")); | |
|
Lei Zhang
2017/04/10 17:38:41
Just say something like "printing is not enabled"
jzfeng
2017/04/10 18:32:27
Done.
| |
| 198 #else | |
| 186 content::WebContents* web_contents = agent_host->GetWebContents(); | 199 content::WebContents* web_contents = agent_host->GetWebContents(); |
| 187 content::RenderFrameHost* rfh = web_contents->GetMainFrame(); | 200 content::RenderFrameHost* rfh = web_contents->GetMainFrame(); |
| 188 | 201 |
| 189 printing::HeadlessPrintManager::FromWebContents(web_contents) | 202 printing::HeadlessPrintManager::FromWebContents(web_contents) |
| 190 ->GetPDFContents(rfh, base::Bind(&PDFCreated, callback, command_id)); | 203 ->GetPDFContents(rfh, base::Bind(&PDFCreated, callback, command_id)); |
| 204 #endif | |
| 191 } | 205 } |
| 192 | 206 |
| 193 std::unique_ptr<base::DictionaryValue> | 207 std::unique_ptr<base::DictionaryValue> |
| 194 HeadlessDevToolsManagerDelegate::CreateTarget( | 208 HeadlessDevToolsManagerDelegate::CreateTarget( |
| 195 int command_id, | 209 int command_id, |
| 196 const base::DictionaryValue* params) { | 210 const base::DictionaryValue* params) { |
| 197 std::string url; | 211 std::string url; |
| 198 std::string browser_context_id; | 212 std::string browser_context_id; |
| 199 int width = browser_->options()->window_size.width(); | 213 int width = browser_->options()->window_size.width(); |
| 200 int height = browser_->options()->window_size.height(); | 214 int height = browser_->options()->window_size.height(); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 289 | 303 |
| 290 std::unique_ptr<base::Value> result( | 304 std::unique_ptr<base::Value> result( |
| 291 target::DisposeBrowserContextResult::Builder() | 305 target::DisposeBrowserContextResult::Builder() |
| 292 .SetSuccess(success) | 306 .SetSuccess(success) |
| 293 .Build() | 307 .Build() |
| 294 ->Serialize()); | 308 ->Serialize()); |
| 295 return CreateSuccessResponse(command_id, std::move(result)); | 309 return CreateSuccessResponse(command_id, std::move(result)); |
| 296 } | 310 } |
| 297 | 311 |
| 298 } // namespace headless | 312 } // namespace headless |
| OLD | NEW |