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

Side by Side Diff: content/browser/plugin_service_impl_browsertest.cc

Issue 12315023: Merge 180159 (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1364/src/
Patch Set: Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "content/browser/plugin_service_impl.h" 5 #include "content/browser/plugin_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "content/public/browser/browser_context.h" 11 #include "content/public/browser/browser_context.h"
12 #include "content/public/browser/plugin_service_filter.h"
12 #include "content/public/browser/resource_context.h" 13 #include "content/public/browser/resource_context.h"
13 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
14 #include "content/public/common/content_switches.h" 15 #include "content/public/common/content_switches.h"
15 #include "content/public/test/test_browser_thread.h" 16 #include "content/public/test/test_browser_thread.h"
16 #include "content/public/test/test_utils.h" 17 #include "content/public/test/test_utils.h"
17 #include "content/shell/shell.h" 18 #include "content/shell/shell.h"
18 #include "content/test/content_browser_test.h" 19 #include "content/test/content_browser_test.h"
19 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
20 #include "webkit/plugins/npapi/plugin_list.h" 21 #include "webkit/plugins/npapi/plugin_list.h"
21 22
22 namespace content { 23 namespace content {
23 24
24 const char kNPAPITestPluginMimeType[] = "application/vnd.npapi-test"; 25 const char kNPAPITestPluginMimeType[] = "application/vnd.npapi-test";
25 26
26 void OpenChannel(PluginProcessHost::Client* client) { 27 void OpenChannel(PluginProcessHost::Client* client) {
27 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
28 // Start opening the channel 29 // Start opening the channel
29 PluginServiceImpl::GetInstance()->OpenChannelToNpapiPlugin( 30 PluginServiceImpl::GetInstance()->OpenChannelToNpapiPlugin(
30 0, 0, GURL(), GURL(), kNPAPITestPluginMimeType, client); 31 0, 0, GURL(), GURL(), kNPAPITestPluginMimeType, client);
31 } 32 }
32 33
33 // Mock up of the Client and the Listener classes that would supply the 34 // Mock up of the Client and the Listener classes that would supply the
34 // communication channel with the plugin. 35 // communication channel with the plugin.
35 class MockPluginProcessHostClient : public PluginProcessHost::Client, 36 class MockPluginProcessHostClient : public PluginProcessHost::Client,
36 public IPC::Listener { 37 public IPC::Listener {
37 public: 38 public:
38 MockPluginProcessHostClient(ResourceContext* context) 39 MockPluginProcessHostClient(ResourceContext* context, bool expect_fail)
39 : context_(context), 40 : context_(context),
40 channel_(NULL), 41 channel_(NULL),
41 set_plugin_info_called_(false) { 42 set_plugin_info_called_(false),
43 expect_fail_(expect_fail) {
42 } 44 }
43 45
44 virtual ~MockPluginProcessHostClient() { 46 virtual ~MockPluginProcessHostClient() {
45 if (channel_) 47 if (channel_)
46 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_); 48 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_);
47 } 49 }
48 50
49 // PluginProcessHost::Client implementation. 51 // PluginProcessHost::Client implementation.
50 virtual int ID() OVERRIDE { return 42; } 52 virtual int ID() OVERRIDE { return 42; }
51 virtual bool OffTheRecord() OVERRIDE { return false; } 53 virtual bool OffTheRecord() OVERRIDE { return false; }
(...skipping 20 matching lines...) Expand all
72 virtual void OnError() OVERRIDE { 74 virtual void OnError() OVERRIDE {
73 Fail(); 75 Fail();
74 } 76 }
75 77
76 // IPC::Listener implementation. 78 // IPC::Listener implementation.
77 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 79 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
78 Fail(); 80 Fail();
79 return false; 81 return false;
80 } 82 }
81 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE { 83 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE {
84 if (expect_fail_)
85 FAIL();
82 QuitMessageLoop(); 86 QuitMessageLoop();
83 } 87 }
84 virtual void OnChannelError() OVERRIDE { 88 virtual void OnChannelError() OVERRIDE {
85 Fail(); 89 Fail();
86 } 90 }
87 #if defined(OS_POSIX) 91 #if defined(OS_POSIX)
88 virtual void OnChannelDenied() OVERRIDE { 92 virtual void OnChannelDenied() OVERRIDE {
89 Fail(); 93 Fail();
90 } 94 }
91 virtual void OnChannelListenError() OVERRIDE { 95 virtual void OnChannelListenError() OVERRIDE {
92 Fail(); 96 Fail();
93 } 97 }
94 #endif 98 #endif
95 99
96 private: 100 private:
97 void Fail() { 101 void Fail() {
98 FAIL(); 102 if (!expect_fail_)
103 FAIL();
99 QuitMessageLoop(); 104 QuitMessageLoop();
100 } 105 }
101 106
102 void QuitMessageLoop() { 107 void QuitMessageLoop() {
103 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 108 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
104 MessageLoop::QuitClosure()); 109 MessageLoop::QuitClosure());
105 } 110 }
106 111
107 ResourceContext* context_; 112 ResourceContext* context_;
108 IPC::Channel* channel_; 113 IPC::Channel* channel_;
109 bool set_plugin_info_called_; 114 bool set_plugin_info_called_;
115 bool expect_fail_;
110 DISALLOW_COPY_AND_ASSIGN(MockPluginProcessHostClient); 116 DISALLOW_COPY_AND_ASSIGN(MockPluginProcessHostClient);
111 }; 117 };
112 118
119 class MockPluginServiceFilter : public content::PluginServiceFilter {
120 public:
121 MockPluginServiceFilter() {}
122
123 virtual bool IsPluginEnabled(
124 int render_process_id,
125 int render_view_id,
126 const void* context,
127 const GURL& url,
128 const GURL& policy_url,
129 webkit::WebPluginInfo* plugin) OVERRIDE { return true; }
130
131 virtual bool CanLoadPlugin(
132 int render_process_id,
133 const FilePath& path) OVERRIDE { return false; }
134 };
135
113 class PluginServiceTest : public ContentBrowserTest { 136 class PluginServiceTest : public ContentBrowserTest {
114 public: 137 public:
115 PluginServiceTest() {} 138 PluginServiceTest() {}
116 139
117 ResourceContext* GetResourceContext() { 140 ResourceContext* GetResourceContext() {
118 return shell()->web_contents()->GetBrowserContext()->GetResourceContext(); 141 return shell()->web_contents()->GetBrowserContext()->GetResourceContext();
119 } 142 }
120 143
121 virtual void SetUpCommandLine(CommandLine* command_line) { 144 virtual void SetUpCommandLine(CommandLine* command_line) {
122 #ifdef OS_MACOSX 145 #ifdef OS_MACOSX
123 FilePath browser_directory; 146 FilePath browser_directory;
124 PathService::Get(base::DIR_MODULE, &browser_directory); 147 PathService::Get(base::DIR_MODULE, &browser_directory);
125 command_line->AppendSwitchPath(switches::kExtraPluginDir, 148 command_line->AppendSwitchPath(switches::kExtraPluginDir,
126 browser_directory.AppendASCII("plugins")); 149 browser_directory.AppendASCII("plugins"));
127 #endif 150 #endif
128 // TODO(jam): since these plugin tests are running under Chrome, we need to 151 // TODO(jam): since these plugin tests are running under Chrome, we need to
129 // tell it to disable its security features for old plugins. Once this is 152 // tell it to disable its security features for old plugins. Once this is
130 // running under content_browsertests, these flags won't be needed. 153 // running under content_browsertests, these flags won't be needed.
131 // http://crbug.com/90448 154 // http://crbug.com/90448
132 // switches::kAlwaysAuthorizePlugins 155 // switches::kAlwaysAuthorizePlugins
133 command_line->AppendSwitch("always-authorize-plugins"); 156 command_line->AppendSwitch("always-authorize-plugins");
134 } 157 }
135 }; 158 };
136 159
137 // Try to open a channel to the test plugin. Minimal plugin process spawning 160 // Try to open a channel to the test plugin. Minimal plugin process spawning
138 // test for the PluginService interface. 161 // test for the PluginService interface.
139 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToPlugin) { 162 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToPlugin) {
140 MockPluginProcessHostClient mock_client(GetResourceContext()); 163 MockPluginProcessHostClient mock_client(GetResourceContext(), false);
164 BrowserThread::PostTask(
165 BrowserThread::IO, FROM_HERE,
166 base::Bind(&OpenChannel, &mock_client));
167 RunMessageLoop();
168 }
169
170 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToDeniedPlugin) {
171 MockPluginServiceFilter filter;
172 PluginServiceImpl::GetInstance()->SetFilter(&filter);
173 MockPluginProcessHostClient mock_client(GetResourceContext(), true);
141 BrowserThread::PostTask( 174 BrowserThread::PostTask(
142 BrowserThread::IO, FROM_HERE, 175 BrowserThread::IO, FROM_HERE,
143 base::Bind(&OpenChannel, &mock_client)); 176 base::Bind(&OpenChannel, &mock_client));
144 RunMessageLoop(); 177 RunMessageLoop();
145 } 178 }
146 179
147 // A strict mock that fails if any of the methods are called. They shouldn't be 180 // A strict mock that fails if any of the methods are called. They shouldn't be
148 // called since the request should get canceled before then. 181 // called since the request should get canceled before then.
149 class MockCanceledPluginServiceClient : public PluginProcessHost::Client { 182 class MockCanceledPluginServiceClient : public PluginProcessHost::Client {
150 public: 183 public:
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 BrowserThread::IO, FROM_HERE, 361 BrowserThread::IO, FROM_HERE,
329 base::Bind(&OpenChannel, &mock_client)); 362 base::Bind(&OpenChannel, &mock_client));
330 RunMessageLoop(); 363 RunMessageLoop();
331 EXPECT_TRUE(mock_client.get_resource_context_called()); 364 EXPECT_TRUE(mock_client.get_resource_context_called());
332 EXPECT_TRUE(mock_client.set_plugin_info_called()); 365 EXPECT_TRUE(mock_client.set_plugin_info_called());
333 EXPECT_TRUE(mock_client.on_found_plugin_process_host_called()); 366 EXPECT_TRUE(mock_client.on_found_plugin_process_host_called());
334 EXPECT_TRUE(mock_client.on_sent_plugin_channel_request_called()); 367 EXPECT_TRUE(mock_client.on_sent_plugin_channel_request_called());
335 } 368 }
336 369
337 } // namespace content 370 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/plugin_service_impl.cc ('k') | content/browser/renderer_host/render_message_filter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698