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

Unified Diff: headless/app/headless_shell.cc

Issue 1906423003: headless: Remove old load observer API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update headless shell. Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « headless/BUILD.gn ('k') | headless/lib/browser/headless_devtools_client_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: headless/app/headless_shell.cc
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index e1348e328ed10634668affd59a479af1b29429ed..cc79e1ec75d039ffb771445c8bab37e0fe107c75 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -14,6 +14,7 @@
#include "content/public/common/content_switches.h"
#include "headless/app/headless_shell_switches.h"
#include "headless/public/domains/page.h"
+#include "headless/public/domains/runtime.h"
#include "headless/public/headless_browser.h"
#include "headless/public/headless_devtools_client.h"
#include "headless/public/headless_devtools_target.h"
@@ -25,6 +26,7 @@ using headless::HeadlessBrowser;
using headless::HeadlessDevToolsClient;
using headless::HeadlessWebContents;
namespace page = headless::page;
+namespace runtime = headless::runtime;
namespace {
// Address where to listen to incoming DevTools connections.
@@ -32,18 +34,12 @@ const char kDevToolsHttpServerAddress[] = "127.0.0.1";
}
// A sample application which demonstrates the use of the headless API.
-class HeadlessShell : public HeadlessWebContents::Observer {
+class HeadlessShell : public HeadlessWebContents::Observer, page::Observer {
public:
HeadlessShell()
: browser_(nullptr), devtools_client_(HeadlessDevToolsClient::Create()) {}
~HeadlessShell() override {}
- void DevToolsTargetReady() override {
- if (!RemoteDebuggingEnabled())
- web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
- // TODO(skyostil): Implement more features to demonstrate the devtools API.
- }
-
void OnStart(HeadlessBrowser* browser) {
browser_ = browser;
@@ -66,18 +62,43 @@ class HeadlessShell : public HeadlessWebContents::Observer {
web_contents_->AddObserver(this);
}
- void ShutdownIfNeeded() {
+ void Shutdown() {
+ if (!web_contents_)
+ return;
if (!RemoteDebuggingEnabled()) {
+ devtools_client_->GetPage()->RemoveObserver(this);
web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get());
- web_contents_->RemoveObserver(this);
- web_contents_ = nullptr;
- browser_->Shutdown();
}
+ web_contents_->RemoveObserver(this);
+ web_contents_ = nullptr;
+ browser_->Shutdown();
}
// HeadlessWebContents::Observer implementation:
- void DocumentOnLoadCompletedInMainFrame() override {
- ShutdownIfNeeded();
+ void DevToolsTargetReady() override {
+ if (RemoteDebuggingEnabled())
+ return;
+ web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
+ devtools_client_->GetPage()->AddObserver(this);
+ devtools_client_->GetPage()->Enable();
+ // Check if the document had already finished loading by the time we
+ // attached.
+ devtools_client_->GetRuntime()->Evaluate(
+ "document.readyState",
+ base::Bind(&HeadlessShell::OnReadyState, base::Unretained(this)));
+ // TODO(skyostil): Implement more features to demonstrate the devtools API.
+ }
+
+ void OnReadyState(std::unique_ptr<runtime::EvaluateResult> result) {
+ std::string ready_state;
+ if (result->GetResult()->GetValue()->GetAsString(&ready_state) &&
+ ready_state == "complete")
+ Shutdown();
+ }
+
+ // page::Observer implementation:
+ void OnLoadEventFired(const page::LoadEventFiredParams& params) override {
+ Shutdown();
}
bool RemoteDebuggingEnabled() const {
« no previous file with comments | « headless/BUILD.gn ('k') | headless/lib/browser/headless_devtools_client_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698