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

Side by Side 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 unified diff | Download patch
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 <memory> 5 #include <memory>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_enumerator.h"
8 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
9 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
10 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
11 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
13 #include "content/public/common/url_constants.h"
12 #include "content/public/test/browser_test.h" 14 #include "content/public/test/browser_test.h"
15 #include "headless/public/devtools/domains/inspector.h"
13 #include "headless/public/devtools/domains/network.h" 16 #include "headless/public/devtools/domains/network.h"
14 #include "headless/public/devtools/domains/page.h" 17 #include "headless/public/devtools/domains/page.h"
15 #include "headless/public/headless_browser.h" 18 #include "headless/public/headless_browser.h"
16 #include "headless/public/headless_devtools_client.h" 19 #include "headless/public/headless_devtools_client.h"
17 #include "headless/public/headless_devtools_target.h" 20 #include "headless/public/headless_devtools_target.h"
18 #include "headless/public/headless_web_contents.h" 21 #include "headless/public/headless_web_contents.h"
19 #include "headless/test/headless_browser_test.h" 22 #include "headless/test/headless_browser_test.h"
20 #include "headless/test/test_protocol_handler.h" 23 #include "headless/test/test_protocol_handler.h"
21 #include "headless/test/test_url_request_job.h" 24 #include "headless/test/test_url_request_job.h"
22 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 25 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 638
636 // Make sure the launcher was invoked when starting the renderer. 639 // Make sure the launcher was invoked when starting the renderer.
637 std::string stamp; 640 std::string stamp;
638 EXPECT_TRUE(base::ReadFileToString(launcher_stamp, &stamp)); 641 EXPECT_TRUE(base::ReadFileToString(launcher_stamp, &stamp));
639 EXPECT_GE(stamp.find("--type=renderer"), 0u); 642 EXPECT_GE(stamp.find("--type=renderer"), 0u);
640 643
641 base::DeleteFile(launcher_script, false); 644 base::DeleteFile(launcher_script, false);
642 base::DeleteFile(launcher_stamp, false); 645 base::DeleteFile(launcher_stamp, false);
643 } 646 }
644 647
648 class CrashReporterTest : public HeadlessBrowserTest,
649 public HeadlessWebContents::Observer,
650 inspector::ExperimentalObserver {
651 public:
652 CrashReporterTest() : devtools_client_(HeadlessDevToolsClient::Create()) {}
653 ~CrashReporterTest() override {}
654
655 void SetUp() override {
656 base::ThreadRestrictions::SetIOAllowed(true);
657 base::CreateNewTempDirectory("CrashReporterTest", &crash_dumps_dir_);
658 EXPECT_FALSE(options()->enable_crash_reporter);
659 options()->enable_crash_reporter = true;
660 options()->crash_dumps_dir = crash_dumps_dir_;
661 HeadlessBrowserTest::SetUp();
662 }
663
664 void TearDown() override {
665 base::ThreadRestrictions::SetIOAllowed(true);
666 base::DeleteFile(crash_dumps_dir_, /* recursive */ false);
667 }
668
669 // HeadlessWebContents::Observer implementation:
670 void DevToolsTargetReady() override {
671 EXPECT_TRUE(web_contents_->GetDevToolsTarget());
672 web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
673 devtools_client_->GetInspector()->GetExperimental()->AddObserver(this);
674 }
675
676 // inspector::ExperimentalObserver implementation:
677 void OnTargetCrashed(const inspector::TargetCrashedParams&) override {
678 FinishAsynchronousTest();
679 }
680
681 protected:
682 HeadlessBrowserContext* browser_context_ = nullptr;
683 HeadlessWebContents* web_contents_ = nullptr;
684 std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
685 base::FilePath crash_dumps_dir_;
686 };
687
688 // TODO(skyostil): Minidump generation currently is only supported on Linux.
689 #if defined(OS_POSIX) && !defined(OS_MACOSX)
690 #define MAYBE_GenerateMinidump GenerateMinidump
691 #else
692 #define MAYBE_GenerateMinidump DISABLED_GenerateMinidump
693 #endif // defined(OS_POSIX) && !defined(OS_MACOSX)
694 IN_PROC_BROWSER_TEST_F(CrashReporterTest, MAYBE_GenerateMinidump) {
695 // Navigates a tab to chrome://crash and checks that a minidump is generated.
696 // Note that we only test renderer crashes here -- browser crashes need to be
697 // tested with a separate harness.
698 //
699 // The case where crash reporting is disabled is covered by
700 // HeadlessCrashObserverTest.
701 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.
702 browser()->CreateBrowserContextBuilder();
703 browser_context_ = builder.Build();
704
705 web_contents_ = browser_context_->CreateWebContentsBuilder()
706 .SetInitialURL(GURL(content::kChromeUICrashURL))
707 .Build();
708
709 web_contents_->AddObserver(this);
710 RunAsynchronousTest();
711
712 // The target has crashed and should no longer be there.
713 EXPECT_FALSE(web_contents_->GetDevToolsTarget());
714
715 // Check that one minidump got created.
716 {
717 base::ThreadRestrictions::SetIOAllowed(true);
718 base::FileEnumerator it(crash_dumps_dir_, /* recursive */ false,
719 base::FileEnumerator::FILES);
720 base::FilePath minidump = it.Next();
721 EXPECT_FALSE(minidump.empty());
722 EXPECT_EQ(".dmp", minidump.Extension());
723 EXPECT_TRUE(it.Next().empty());
724 }
725
726 web_contents_->RemoveObserver(this);
727 web_contents_->Close();
728 web_contents_ = nullptr;
729
730 browser_context_->Close();
731 browser_context_ = nullptr;
732 }
733
645 } // namespace headless 734 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698