summaryrefslogtreecommitdiffstats
path: root/chrome/test/ui/npapi_test_helper.cc
blob: d5e24ad5e6d16495798e5b954ed5e298b8e4092c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright 2008, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/test/ui/npapi_test_helper.h"

#include "base/file_util.h"
#include "base/test/test_file_util.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"

#if defined(OS_WIN)
static const char kNpapiTestPluginName[] = "npapi_test_plugin.dll";
#elif defined(OS_MACOSX)
static const char kNpapiTestPluginName[] = "npapi_test_plugin.plugin";
static const char kLayoutPluginName[] = "TestNetscapePlugIn.plugin";
#elif defined(OS_LINUX)
static const char kNpapiTestPluginName[] = "libnpapi_test_plugin.so";
#endif

namespace npapi_test {
const char kTestCompleteCookie[] = "status";
const char kTestCompleteSuccess[] = "OK";
}  // namespace npapi_test.

NPAPITesterBase::NPAPITesterBase(const std::string& test_plugin_name)
  : test_plugin_name_(test_plugin_name) {
}

void NPAPITesterBase::SetUp() {
  // We need to copy our test-plugin into the plugins directory so that
  // the browser can load it.
  FilePath plugins_directory = GetPluginsDirectory();
  FilePath plugin_src = browser_directory_.AppendASCII(test_plugin_name_);
  ASSERT_TRUE(file_util::PathExists(plugin_src));
  test_plugin_path_ = plugins_directory.AppendASCII(test_plugin_name_);

  file_util::CreateDirectory(plugins_directory);
  ASSERT_TRUE(file_util::CopyDirectory(plugin_src, test_plugin_path_, true))
      << "Copy failed from " << plugin_src.value()
      << " to " << test_plugin_path_.value();

  UITest::SetUp();
}

void NPAPITesterBase::TearDown() {
  // Tear down the UI test first so that the browser stops using the plugin
  // files.
  UITest::TearDown();
  EXPECT_TRUE(file_util::DieFileDie(test_plugin_path_, true));
}

FilePath NPAPITesterBase::GetPluginsDirectory() {
#if defined(OS_MACOSX)
  std::wstring plugin_subpath(chrome::kBrowserProcessExecutableName);
  plugin_subpath.append(L".app/Contents/PlugIns");
  FilePath plugins_directory = browser_directory_.Append(
      FilePath::FromWStringHack(plugin_subpath));
#else
  FilePath plugins_directory = browser_directory_.AppendASCII("plugins");
#endif
  return plugins_directory;
}

NPAPITester::NPAPITester() : NPAPITesterBase(kNpapiTestPluginName) {
}

void NPAPITester::SetUp() {
#if defined(OS_MACOSX)
  // On Windows and Linux, the layout plugin is copied into plugins/ as part of
  // its build process; we can't do the equivalent on the Mac since Chromium
  // doesn't exist during the Test Shell build.
  FilePath layout_src = browser_directory_.AppendASCII(kLayoutPluginName);
  ASSERT_TRUE(file_util::PathExists(layout_src));
  FilePath plugins_directory = GetPluginsDirectory();
  layout_plugin_path_ = plugins_directory.AppendASCII(kLayoutPluginName);
  file_util::CreateDirectory(plugins_directory);
  ASSERT_TRUE(file_util::CopyDirectory(layout_src, layout_plugin_path_, true));
#endif

  NPAPITesterBase::SetUp();
}

void NPAPITester::TearDown() {
  // Tear down the base class first so that the browser stops using the plugin
  // files.
  NPAPITesterBase::TearDown();
#if defined(OS_MACOSX)
  EXPECT_TRUE(file_util::DieFileDie(layout_plugin_path_, true));
#endif  // OS_MACOSX
}

// NPAPIVisiblePluginTester members.
void NPAPIVisiblePluginTester::SetUp() {
  show_window_ = true;
  NPAPITester::SetUp();
}

// NPAPIIncognitoTester members.
void NPAPIIncognitoTester::SetUp() {
  launch_arguments_.AppendSwitch(switches::kIncognito);
  NPAPITester::SetUp();
}