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
13using extensions::PageCaptureSaveAsMHTMLFunction;
14
15class ExtensionPageCaptureApiTest : public ExtensionApiTest {
16 public:
17  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
18    ExtensionApiTest::SetUpCommandLine(command_line);
19    command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose-gc");
20  }
21};
22
23class PageCaptureSaveAsMHTMLDelegate
24    : public PageCaptureSaveAsMHTMLFunction::TestDelegate {
25 public:
26  PageCaptureSaveAsMHTMLDelegate() {
27    PageCaptureSaveAsMHTMLFunction::SetTestDelegate(this);
28  }
29
30  virtual ~PageCaptureSaveAsMHTMLDelegate() {
31    PageCaptureSaveAsMHTMLFunction::SetTestDelegate(NULL);
32  }
33
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
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