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

Unified Diff: headless/lib/headless_browser_browsertest.cc

Issue 2693943004: headless: Add support for minidump generation on Linux (Closed)
Patch Set: Formatting Created 3 years, 10 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
Index: headless/lib/headless_browser_browsertest.cc
diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc
index 0c4557cba273808c3e9d98ad4bdd1275932cac2e..321c1d0e9bee0abdc5ff1dc612dfd642224f5674 100644
--- a/headless/lib/headless_browser_browsertest.cc
+++ b/headless/lib/headless_browser_browsertest.cc
@@ -5,11 +5,14 @@
#include <memory>
#include "base/command_line.h"
+#include "base/files/file_enumerator.h"
#include "base/files/file_util.h"
#include "base/memory/ptr_util.h"
#include "base/strings/stringprintf.h"
#include "base/threading/thread_restrictions.h"
+#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test.h"
+#include "headless/public/devtools/domains/inspector.h"
#include "headless/public/devtools/domains/network.h"
#include "headless/public/devtools/domains/page.h"
#include "headless/public/headless_browser.h"
@@ -642,4 +645,90 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, MAYBE_RendererCommandPrefixTest) {
base::DeleteFile(launcher_stamp, false);
}
+class CrashReporterTest : public HeadlessBrowserTest,
+ public HeadlessWebContents::Observer,
+ inspector::ExperimentalObserver {
+ public:
+ CrashReporterTest() : devtools_client_(HeadlessDevToolsClient::Create()) {}
+ ~CrashReporterTest() override {}
+
+ void SetUp() override {
+ base::ThreadRestrictions::SetIOAllowed(true);
+ base::CreateNewTempDirectory("CrashReporterTest", &crash_dumps_dir_);
+ EXPECT_FALSE(options()->enable_crash_reporter);
+ options()->enable_crash_reporter = true;
+ options()->crash_dumps_dir = crash_dumps_dir_;
+ HeadlessBrowserTest::SetUp();
+ }
+
+ void TearDown() override {
+ base::ThreadRestrictions::SetIOAllowed(true);
+ base::DeleteFile(crash_dumps_dir_, /* recursive */ false);
+ }
+
+ // HeadlessWebContents::Observer implementation:
+ void DevToolsTargetReady() override {
+ EXPECT_TRUE(web_contents_->GetDevToolsTarget());
+ web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
+ devtools_client_->GetInspector()->GetExperimental()->AddObserver(this);
+ }
+
+ // inspector::ExperimentalObserver implementation:
+ void OnTargetCrashed(const inspector::TargetCrashedParams&) override {
+ FinishAsynchronousTest();
+ }
+
+ protected:
+ HeadlessBrowserContext* browser_context_ = nullptr;
+ HeadlessWebContents* web_contents_ = nullptr;
+ std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
+ base::FilePath crash_dumps_dir_;
+};
+
+// TODO(skyostil): Minidump generation currently is only supported on Linux.
+#if defined(OS_POSIX) && !defined(OS_MACOSX)
+#define MAYBE_GenerateMinidump GenerateMinidump
+#else
+#define MAYBE_GenerateMinidump DISABLED_GenerateMinidump
+#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
+IN_PROC_BROWSER_TEST_F(CrashReporterTest, MAYBE_GenerateMinidump) {
+ // Navigates a tab to chrome://crash and checks that a minidump is generated.
+ // Note that we only test renderer crashes here -- browser crashes need to be
+ // tested with a separate harness.
+ //
+ // The case where crash reporting is disabled is covered by
+ // HeadlessCrashObserverTest.
+ HeadlessBrowserContext::Builder builder =
alex clarke (OOO till 29th) 2017/02/14 15:14:08 Do we need this temporary?
Sami 2017/02/14 18:36:46 Not really, removed.
+ browser()->CreateBrowserContextBuilder();
+ browser_context_ = builder.Build();
+
+ web_contents_ = browser_context_->CreateWebContentsBuilder()
+ .SetInitialURL(GURL(content::kChromeUICrashURL))
+ .Build();
+
+ web_contents_->AddObserver(this);
+ RunAsynchronousTest();
+
+ // The target has crashed and should no longer be there.
+ EXPECT_FALSE(web_contents_->GetDevToolsTarget());
+
+ // Check that one minidump got created.
+ {
+ base::ThreadRestrictions::SetIOAllowed(true);
+ base::FileEnumerator it(crash_dumps_dir_, /* recursive */ false,
+ base::FileEnumerator::FILES);
+ base::FilePath minidump = it.Next();
+ EXPECT_FALSE(minidump.empty());
+ EXPECT_EQ(".dmp", minidump.Extension());
+ EXPECT_TRUE(it.Next().empty());
+ }
+
+ web_contents_->RemoveObserver(this);
+ web_contents_->Close();
+ web_contents_ = nullptr;
+
+ browser_context_->Close();
+ browser_context_ = nullptr;
+}
+
} // namespace headless

Powered by Google App Engine
This is Rietveld 408576698