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

Side by Side Diff: headless/app/headless_shell.cc

Issue 2577483002: headless: Remove iostream usage (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <iostream>
6 #include <memory> 5 #include <memory>
6 #include <sstream>
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/json/json_writer.h" 14 #include "base/json/json_writer.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 236
237 void OnPageReady() { 237 void OnPageReady() {
238 if (processed_page_ready_) 238 if (processed_page_ready_)
239 return; 239 return;
240 processed_page_ready_ = true; 240 processed_page_ready_ = true;
241 241
242 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpDom)) { 242 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpDom)) {
243 FetchDom(); 243 FetchDom();
244 } else if (base::CommandLine::ForCurrentProcess()->HasSwitch( 244 } else if (base::CommandLine::ForCurrentProcess()->HasSwitch(
245 switches::kRepl)) { 245 switches::kRepl)) {
246 std::cout 246 LOG(INFO)
247 << "Type a Javascript expression to evaluate or \"quit\" to exit." 247 << "Type a Javascript expression to evaluate or \"quit\" to exit.";
248 << std::endl;
249 InputExpression(); 248 InputExpression();
250 } else if (base::CommandLine::ForCurrentProcess()->HasSwitch( 249 } else if (base::CommandLine::ForCurrentProcess()->HasSwitch(
251 switches::kScreenshot)) { 250 switches::kScreenshot)) {
252 CaptureScreenshot(); 251 CaptureScreenshot();
253 } else { 252 } else {
254 Shutdown(); 253 Shutdown();
255 } 254 }
256 } 255 }
257 256
258 void FetchDom() { 257 void FetchDom() {
259 devtools_client_->GetRuntime()->Evaluate( 258 devtools_client_->GetRuntime()->Evaluate(
260 "document.body.innerHTML", 259 "document.body.innerHTML",
261 base::Bind(&HeadlessShell::OnDomFetched, weak_factory_.GetWeakPtr())); 260 base::Bind(&HeadlessShell::OnDomFetched, weak_factory_.GetWeakPtr()));
262 } 261 }
263 262
264 void OnDomFetched(std::unique_ptr<runtime::EvaluateResult> result) { 263 void OnDomFetched(std::unique_ptr<runtime::EvaluateResult> result) {
265 if (result->HasExceptionDetails()) { 264 if (result->HasExceptionDetails()) {
266 LOG(ERROR) << "Failed to evaluate document.body.innerHTML: " 265 LOG(ERROR) << "Failed to evaluate document.body.innerHTML: "
267 << result->GetExceptionDetails()->GetText(); 266 << result->GetExceptionDetails()->GetText();
268 } else { 267 } else {
269 std::string dom; 268 std::string dom;
270 if (result->GetResult()->GetValue()->GetAsString(&dom)) { 269 if (result->GetResult()->GetValue()->GetAsString(&dom)) {
271 std::cout << dom << std::endl; 270 printf("%s\n", dom.c_str());
272 } 271 }
273 } 272 }
274 Shutdown(); 273 Shutdown();
275 } 274 }
276 275
277 void InputExpression() { 276 void InputExpression() {
278 // Note that a real system should read user input asynchronously, because 277 // Note that a real system should read user input asynchronously, because
279 // otherwise all other browser activity is suspended (e.g., page loading). 278 // otherwise all other browser activity is suspended (e.g., page loading).
280 std::string expression; 279 printf(">>> ");
281 std::cout << ">>> "; 280 std::stringstream expression;
282 std::getline(std::cin, expression); 281 while (true) {
283 if (std::cin.bad() || std::cin.eof() || expression == "quit") { 282 char c = fgetc(stdin);
283 if (c == EOF || c == '\n') {
284 break;
285 }
286 expression << c;
287 }
288 if (expression.str() == "quit") {
284 Shutdown(); 289 Shutdown();
285 return; 290 return;
286 } 291 }
287 devtools_client_->GetRuntime()->Evaluate( 292 devtools_client_->GetRuntime()->Evaluate(
288 expression, base::Bind(&HeadlessShell::OnExpressionResult, 293 expression.str(), base::Bind(&HeadlessShell::OnExpressionResult,
289 weak_factory_.GetWeakPtr())); 294 weak_factory_.GetWeakPtr()));
290 } 295 }
291 296
292 void OnExpressionResult(std::unique_ptr<runtime::EvaluateResult> result) { 297 void OnExpressionResult(std::unique_ptr<runtime::EvaluateResult> result) {
293 std::unique_ptr<base::Value> value = result->Serialize(); 298 std::unique_ptr<base::Value> value = result->Serialize();
294 std::string result_json; 299 std::string result_json;
295 base::JSONWriter::Write(*value, &result_json); 300 base::JSONWriter::Write(*value, &result_json);
296 std::cout << result_json << std::endl; 301 printf("%s\n", result_json.c_str());
297 InputExpression(); 302 InputExpression();
298 } 303 }
299 304
300 void CaptureScreenshot() { 305 void CaptureScreenshot() {
301 devtools_client_->GetPage()->GetExperimental()->CaptureScreenshot( 306 devtools_client_->GetPage()->GetExperimental()->CaptureScreenshot(
302 page::CaptureScreenshotParams::Builder().Build(), 307 page::CaptureScreenshotParams::Builder().Build(),
303 base::Bind(&HeadlessShell::OnScreenshotCaptured, 308 base::Bind(&HeadlessShell::OnScreenshotCaptured,
304 weak_factory_.GetWeakPtr())); 309 weak_factory_.GetWeakPtr()));
305 } 310 }
306 311
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 359 }
355 360
356 void OnScreenshotFileWritten(const base::FilePath file_name, 361 void OnScreenshotFileWritten(const base::FilePath file_name,
357 const int length, 362 const int length,
358 const int write_result) { 363 const int write_result) {
359 if (write_result < length) { 364 if (write_result < length) {
360 // TODO(eseckler): Support recovering from partial writes. 365 // TODO(eseckler): Support recovering from partial writes.
361 LOG(ERROR) << "Writing screenshot to file " << file_name.value() 366 LOG(ERROR) << "Writing screenshot to file " << file_name.value()
362 << " was unsuccessful: " << net::ErrorToString(write_result); 367 << " was unsuccessful: " << net::ErrorToString(write_result);
363 } else { 368 } else {
364 std::cout << "Screenshot written to file " << file_name.value() << "." 369 LOG(INFO) << "Screenshot written to file " << file_name.value() << "."
365 << std::endl; 370 << std::endl;
366 } 371 }
367 int close_result = screenshot_file_stream_->Close(base::Bind( 372 int close_result = screenshot_file_stream_->Close(base::Bind(
368 &HeadlessShell::OnScreenshotFileClosed, weak_factory_.GetWeakPtr())); 373 &HeadlessShell::OnScreenshotFileClosed, weak_factory_.GetWeakPtr()));
369 if (close_result != net::ERR_IO_PENDING) { 374 if (close_result != net::ERR_IO_PENDING) {
370 // Operation could not be started. 375 // Operation could not be started.
371 OnScreenshotFileClosed(close_result); 376 OnScreenshotFileClosed(close_result);
372 } 377 }
373 } 378 }
374 379
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 } 470 }
466 builder.SetWindowSize(parsed_window_size); 471 builder.SetWindowSize(parsed_window_size);
467 } 472 }
468 473
469 return HeadlessBrowserMain( 474 return HeadlessBrowserMain(
470 builder.Build(), 475 builder.Build(),
471 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell))); 476 base::Bind(&HeadlessShell::OnStart, base::Unretained(&shell)));
472 } 477 }
473 478
474 } // namespace headless 479 } // namespace headless
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698