1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/base_switches.h" 6 #include "base/command_line.h" 7 #include "chrome/browser/extensions/api/page_capture/page_capture_api.h" 8 #include "chrome/browser/extensions/extension_apitest.h" 9 #include "chrome/common/chrome_switches.h" 10 #include "chrome/test/base/ui_test_utils.h" 11 #include "net/dns/mock_host_resolver.h" 12 13 using extensions::PageCaptureSaveAsMHTMLFunction; 14 15 class ExtensionPageCaptureApiTest : public ExtensionApiTest { 16 public: SetUpCommandLine(CommandLine * command_line)17 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 18 ExtensionApiTest::SetUpCommandLine(command_line); 19 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc"); 20 } 21 }; 22 23 class PageCaptureSaveAsMHTMLDelegate 24 : public PageCaptureSaveAsMHTMLFunction::TestDelegate { 25 public: PageCaptureSaveAsMHTMLDelegate()26 PageCaptureSaveAsMHTMLDelegate() { 27 PageCaptureSaveAsMHTMLFunction::SetTestDelegate(this); 28 } 29 ~PageCaptureSaveAsMHTMLDelegate()30 virtual ~PageCaptureSaveAsMHTMLDelegate() { 31 PageCaptureSaveAsMHTMLFunction::SetTestDelegate(NULL); 32 } 33 OnTemporaryFileCreated(const base::FilePath & temp_file)34 virtual void OnTemporaryFileCreated( 35 const base::FilePath& temp_file) OVERRIDE { 36 temp_file_ = temp_file; 37 } 38 39 base::FilePath temp_file_; 40 }; 41 IN_PROC_BROWSER_TEST_F(ExtensionPageCaptureApiTest,SaveAsMHTML)42IN_PROC_BROWSER_TEST_F(ExtensionPageCaptureApiTest, SaveAsMHTML) { 43 host_resolver()->AddRule("www.a.com", "127.0.0.1"); 44 ASSERT_TRUE(StartEmbeddedTestServer()); 45 PageCaptureSaveAsMHTMLDelegate delegate; 46 ASSERT_TRUE(RunExtensionTest("page_capture")) << message_; 47 ASSERT_FALSE(delegate.temp_file_.empty()); 48 // Flush the message loops to make sure the delete happens. 49 content::RunAllPendingInMessageLoop(content::BrowserThread::FILE); 50 content::RunAllPendingInMessageLoop(content::BrowserThread::IO); 51 ASSERT_FALSE(base::PathExists(delegate.temp_file_)); 52 } 53