summaryrefslogtreecommitdiffstats
path: root/webkit/tools/test_shell/plugin_tests.cc
blob: f2ad349ef1819c1cff2530819da567c7513086d4 (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright (c) 2006-2008 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 <string>

#include "base/file_util.h"
#include "base/path_service.h"
#include "base/string_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/WebKit/chromium/public/WebScriptSource.h"
#include "webkit/glue/webframe.h"
#include "webkit/glue/webview.h"
#include "webkit/tools/test_shell/test_shell.h"
#include "webkit/tools/test_shell/test_shell_test.h"

using WebKit::WebScriptSource;
using WebKit::WebString;

// Provides functionality for creating plugin tests.
class PluginTest : public TestShellTest {
 public:
  PluginTest() {
    std::wstring current_directory;
    PathService::Get(base::DIR_EXE, &current_directory);
    plugin_src_ = current_directory + L"\\npapi_test_plugin.dll";
    CHECK(file_util::PathExists(plugin_src_));

    plugin_file_path_ = current_directory + L"\\plugins";
    ::CreateDirectory(plugin_file_path_.c_str(), NULL);

    plugin_file_path_ += L"\\npapi_test_plugin.dll";
  }

  void CopyTestPlugin() {
    ASSERT_TRUE(CopyFile(plugin_src_.c_str(), plugin_file_path_.c_str(), FALSE));
  }

  void DeleteTestPlugin() {
    ::DeleteFile(plugin_file_path_.c_str());
  }

  std::wstring plugin_src_;
  std::wstring plugin_file_path_;
};

// Tests navigator.plugins.refresh() works.
TEST_F(PluginTest, Refresh) {
  std::string html = "\
      <div id='result'>Test running....</div>\
      <script>\
      function check() {\
      var l = navigator.plugins.length;\
      var result = document.getElementById('result');\
      for(var i = 0; i < l; i++) {\
        if (navigator.plugins[i].filename == 'npapi_test_plugin.dll') {\
          result.innerHTML = 'DONE';\
          break;\
        }\
      }\
      \
      if (result.innerHTML != 'DONE')\
        result.innerHTML = 'FAIL';\
      }\
      </script>\
      ";

  WebScriptSource call_check(
      WebString::fromUTF8("check();"));
  WebScriptSource refresh(
      WebString::fromUTF8("navigator.plugins.refresh(false)"));

  // Remove any leftover from previous tests if they exist.  We must also
  // refresh WebKit's plugin cache since it might have had an entry for the
  // test plugin from a previous test.
  DeleteTestPlugin();
  ASSERT_FALSE(file_util::PathExists(plugin_file_path_));
  test_shell_->webView()->GetMainFrame()->ExecuteScript(refresh);

  test_shell_->webView()->GetMainFrame()->LoadHTMLString(
      html, GURL("about:blank"));
  test_shell_->WaitTestFinished();

  std::wstring text;
  test_shell_->webView()->GetMainFrame()->ExecuteScript(call_check);
  test_shell_->webView()->GetMainFrame()->GetContentAsPlainText(10000, &text);
  ASSERT_EQ(text, L"FAIL");

  CopyTestPlugin();

  test_shell_->webView()->GetMainFrame()->ExecuteScript(refresh);
  test_shell_->webView()->GetMainFrame()->ExecuteScript(call_check);
  test_shell_->webView()->GetMainFrame()->GetContentAsPlainText(10000, &text);
  ASSERT_EQ(text, L"DONE");

  DeleteTestPlugin();
}

TEST_F(PluginTest, DefaultPluginLoadTest) {
  std::string html = "\
      <div id='result'>Test running....</div>\
      <script>\
      function onSuccess() {\
        var result = document.getElementById('result');\
        result.innerHTML = 'DONE';\
      }\
      </script>\
      <DIV ID=PluginDiv>\
      <object classid=\"clsid:9E8BC6CE-AF35-400c-ABF6-A3F746A1871D\">\
      <embed type=\"application/chromium-test-default-plugin\"\
        mode=\"np_embed\"\
      ></embed>\
      </object>\
      </DIV>\
      ";

  test_shell_->webView()->GetMainFrame()->LoadHTMLString(
      html, GURL("about:blank"));
  test_shell_->WaitTestFinished();

  std::wstring text;
  test_shell_->webView()->GetMainFrame()->GetContentAsPlainText(10000, &text);

  ASSERT_EQ(true, StartsWith(text, L"DONE", true));
}