| Index: headless/app/headless_shell.cc
|
| diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
|
| index 91b17493ba08a155c66c66e25fcb1cd9bfd3a85a..06940881c3f58f14d53e8fa4f5461c57b2398c8a 100644
|
| --- a/headless/app/headless_shell.cc
|
| +++ b/headless/app/headless_shell.cc
|
| @@ -87,7 +87,11 @@ void HeadlessShell::OnStart(HeadlessBrowser* browser) {
|
| // TODO(alexclarke): Should we navigate to about:blank first if using
|
| // virtual time?
|
| if (args.empty())
|
| +#if defined(OS_WIN)
|
| + args.push_back(L"about:blank");
|
| +#else
|
| args.push_back("about:blank");
|
| +#endif
|
| for (auto it = args.rbegin(); it != args.rend(); ++it) {
|
| GURL url(*it);
|
| HeadlessWebContents* web_contents = builder.SetInitialURL(url).Build();
|
| @@ -321,28 +325,26 @@ void HeadlessShell::OnScreenshotCaptured(
|
| file_name = base::FilePath().AppendASCII(kDefaultScreenshotFileName);
|
| }
|
|
|
| - screenshot_file_stream_.reset(
|
| - new net::FileStream(browser_->BrowserFileThread()));
|
| - const int open_result = screenshot_file_stream_->Open(
|
| - file_name, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
|
| - base::File::FLAG_ASYNC,
|
| - base::Bind(&HeadlessShell::OnScreenshotFileOpened,
|
| - weak_factory_.GetWeakPtr(), base::Passed(std::move(result)),
|
| - file_name));
|
| - if (open_result != net::ERR_IO_PENDING) {
|
| + screenshot_file_proxy_.reset(
|
| + new base::FileProxy(browser_->BrowserFileThread().get()));
|
| + if (!screenshot_file_proxy_->CreateOrOpen(
|
| + file_name, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE,
|
| + base::Bind(&HeadlessShell::OnScreenshotFileOpened,
|
| + weak_factory_.GetWeakPtr(),
|
| + base::Passed(std::move(result)), file_name))) {
|
| // Operation could not be started.
|
| - OnScreenshotFileOpened(nullptr, file_name, open_result);
|
| + OnScreenshotFileOpened(nullptr, file_name, base::File::FILE_ERROR_FAILED);
|
| }
|
| }
|
|
|
| void HeadlessShell::OnScreenshotFileOpened(
|
| std::unique_ptr<page::CaptureScreenshotResult> result,
|
| const base::FilePath file_name,
|
| - const int open_result) {
|
| - if (open_result != net::OK) {
|
| + base::File::Error error_code) {
|
| + if (!screenshot_file_proxy_->IsValid()) {
|
| LOG(ERROR) << "Writing screenshot to file " << file_name.value()
|
| << " was unsuccessful, could not open file: "
|
| - << net::ErrorToString(open_result);
|
| + << base::File::ErrorToString(error_code);
|
| return;
|
| }
|
|
|
| @@ -351,19 +353,21 @@ void HeadlessShell::OnScreenshotFileOpened(
|
| scoped_refptr<net::IOBufferWithSize> buf =
|
| new net::IOBufferWithSize(decoded_png.size());
|
| memcpy(buf->data(), decoded_png.data(), decoded_png.size());
|
| - const int write_result = screenshot_file_stream_->Write(
|
| - buf.get(), buf->size(),
|
| - base::Bind(&HeadlessShell::OnScreenshotFileWritten,
|
| - weak_factory_.GetWeakPtr(), file_name, buf->size()));
|
| - if (write_result != net::ERR_IO_PENDING) {
|
| +
|
| + if (!screenshot_file_proxy_->Write(
|
| + 0, buf->data(), buf->size(),
|
| + base::Bind(&HeadlessShell::OnScreenshotFileWritten,
|
| + weak_factory_.GetWeakPtr(), file_name, buf->size()))) {
|
| // Operation may have completed successfully or failed.
|
| - OnScreenshotFileWritten(file_name, buf->size(), write_result);
|
| + OnScreenshotFileWritten(file_name, buf->size(),
|
| + base::File::FILE_ERROR_FAILED, 0);
|
| }
|
| }
|
|
|
| void HeadlessShell::OnScreenshotFileWritten(const base::FilePath file_name,
|
| const int length,
|
| - const int write_result) {
|
| + base::File::Error error_code,
|
| + int write_result) {
|
| if (write_result < length) {
|
| // TODO(eseckler): Support recovering from partial writes.
|
| LOG(ERROR) << "Writing screenshot to file " << file_name.value()
|
| @@ -372,15 +376,15 @@ void HeadlessShell::OnScreenshotFileWritten(const base::FilePath file_name,
|
| LOG(INFO) << "Screenshot written to file " << file_name.value() << "."
|
| << std::endl;
|
| }
|
| - int close_result = screenshot_file_stream_->Close(base::Bind(
|
| - &HeadlessShell::OnScreenshotFileClosed, weak_factory_.GetWeakPtr()));
|
| - if (close_result != net::ERR_IO_PENDING) {
|
| + if (!screenshot_file_proxy_->Close(
|
| + base::Bind(&HeadlessShell::OnScreenshotFileClosed,
|
| + weak_factory_.GetWeakPtr()))) {
|
| // Operation could not be started.
|
| - OnScreenshotFileClosed(close_result);
|
| + OnScreenshotFileClosed(base::File::FILE_ERROR_FAILED);
|
| }
|
| }
|
|
|
| -void HeadlessShell::OnScreenshotFileClosed(const int close_result) {
|
| +void HeadlessShell::OnScreenshotFileClosed(base::File::Error error_code) {
|
| Shutdown();
|
| }
|
|
|
| @@ -426,12 +430,12 @@ bool ValidateCommandLine(const base::CommandLine& command_line) {
|
| }
|
|
|
| int HeadlessShellMain(int argc, const char** argv) {
|
| + base::CommandLine::Init(argc, argv);
|
| RunChildProcessIfNeeded(argc, argv);
|
| HeadlessShell shell;
|
| HeadlessBrowser::Options::Builder builder(argc, argv);
|
|
|
| // Enable devtools if requested.
|
| - base::CommandLine::Init(argc, argv);
|
| const base::CommandLine& command_line(
|
| *base::CommandLine::ForCurrentProcess());
|
| if (!ValidateCommandLine(command_line))
|
|
|