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

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

Issue 12114045: Broke ContentSettingBubbleModelTest.Plugins on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/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"
13 #include "content/public/browser/resource_context.h" 12 #include "content/public/browser/resource_context.h"
14 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
15 #include "content/public/common/content_switches.h" 14 #include "content/public/common/content_switches.h"
16 #include "content/public/test/test_browser_thread.h" 15 #include "content/public/test/test_browser_thread.h"
17 #include "content/public/test/test_utils.h" 16 #include "content/public/test/test_utils.h"
18 #include "content/shell/shell.h" 17 #include "content/shell/shell.h"
19 #include "content/test/content_browser_test.h" 18 #include "content/test/content_browser_test.h"
20 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
21 #include "webkit/plugins/npapi/plugin_list.h" 20 #include "webkit/plugins/npapi/plugin_list.h"
22 #include "webkit/plugins/npapi/plugin_utils.h" 21 #include "webkit/plugins/npapi/plugin_utils.h"
23 22
24 namespace content { 23 namespace content {
25 24
26 const char kNPAPITestPluginMimeType[] = "application/vnd.npapi-test"; 25 const char kNPAPITestPluginMimeType[] = "application/vnd.npapi-test";
27 26
28 void OpenChannel(PluginProcessHost::Client* client) { 27 void OpenChannel(PluginProcessHost::Client* client) {
29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
30 // Start opening the channel 29 // Start opening the channel
31 PluginServiceImpl::GetInstance()->OpenChannelToNpapiPlugin( 30 PluginServiceImpl::GetInstance()->OpenChannelToNpapiPlugin(
32 0, 0, GURL(), GURL(), kNPAPITestPluginMimeType, client); 31 0, 0, GURL(), GURL(), kNPAPITestPluginMimeType, client);
33 } 32 }
34 33
35 // 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
36 // communication channel with the plugin. 35 // communication channel with the plugin.
37 class MockPluginProcessHostClient : public PluginProcessHost::Client, 36 class MockPluginProcessHostClient : public PluginProcessHost::Client,
38 public IPC::Listener { 37 public IPC::Listener {
39 public: 38 public:
40 MockPluginProcessHostClient(ResourceContext* context, bool expect_fail) 39 MockPluginProcessHostClient(ResourceContext* context)
41 : context_(context), 40 : context_(context),
42 channel_(NULL), 41 channel_(NULL),
43 set_plugin_info_called_(false), 42 set_plugin_info_called_(false) {
44 expect_fail_(expect_fail) {
45 } 43 }
46 44
47 virtual ~MockPluginProcessHostClient() { 45 virtual ~MockPluginProcessHostClient() {
48 if (channel_) 46 if (channel_)
49 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_); 47 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_);
50 } 48 }
51 49
52 // PluginProcessHost::Client implementation. 50 // PluginProcessHost::Client implementation.
53 virtual int ID() OVERRIDE { return 42; } 51 virtual int ID() OVERRIDE { return 42; }
54 virtual bool OffTheRecord() OVERRIDE { return false; } 52 virtual bool OffTheRecord() OVERRIDE { return false; }
(...skipping 20 matching lines...) Expand all
75 virtual void OnError() OVERRIDE { 73 virtual void OnError() OVERRIDE {
76 Fail(); 74 Fail();
77 } 75 }
78 76
79 // IPC::Listener implementation. 77 // IPC::Listener implementation.
80 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 78 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
81 Fail(); 79 Fail();
82 return false; 80 return false;
83 } 81 }
84 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE { 82 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE {
85 if (expect_fail_)
86 FAIL();
87 QuitMessageLoop(); 83 QuitMessageLoop();
88 } 84 }
89 virtual void OnChannelError() OVERRIDE { 85 virtual void OnChannelError() OVERRIDE {
90 Fail(); 86 Fail();
91 } 87 }
92 #if defined(OS_POSIX) 88 #if defined(OS_POSIX)
93 virtual void OnChannelDenied() OVERRIDE { 89 virtual void OnChannelDenied() OVERRIDE {
94 Fail(); 90 Fail();
95 } 91 }
96 virtual void OnChannelListenError() OVERRIDE { 92 virtual void OnChannelListenError() OVERRIDE {
97 Fail(); 93 Fail();
98 } 94 }
99 #endif 95 #endif
100 96
101 private: 97 private:
102 void Fail() { 98 void Fail() {
103 if (!expect_fail_) 99 FAIL();
104 FAIL();
105 QuitMessageLoop(); 100 QuitMessageLoop();
106 } 101 }
107 102
108 void QuitMessageLoop() { 103 void QuitMessageLoop() {
109 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 104 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
110 MessageLoop::QuitClosure()); 105 MessageLoop::QuitClosure());
111 } 106 }
112 107
113 ResourceContext* context_; 108 ResourceContext* context_;
114 IPC::Channel* channel_; 109 IPC::Channel* channel_;
115 bool set_plugin_info_called_; 110 bool set_plugin_info_called_;
116 bool expect_fail_;
117 DISALLOW_COPY_AND_ASSIGN(MockPluginProcessHostClient); 111 DISALLOW_COPY_AND_ASSIGN(MockPluginProcessHostClient);
118 }; 112 };
119 113
120 class MockPluginServiceFilter : public content::PluginServiceFilter {
121 public:
122 MockPluginServiceFilter() {}
123
124 virtual bool IsPluginEnabled(
125 int render_process_id,
126 int render_view_id,
127 const void* context,
128 const GURL& url,
129 const GURL& policy_url,
130 webkit::WebPluginInfo* plugin) OVERRIDE { return true; }
131
132 virtual bool CanLoadPlugin(
133 int render_process_id,
134 const FilePath& path) OVERRIDE { return false; }
135 };
136
137 class PluginServiceTest : public ContentBrowserTest { 114 class PluginServiceTest : public ContentBrowserTest {
138 public: 115 public:
139 PluginServiceTest() {} 116 PluginServiceTest() {}
140 117
141 ResourceContext* GetResourceContext() { 118 ResourceContext* GetResourceContext() {
142 return shell()->web_contents()->GetBrowserContext()->GetResourceContext(); 119 return shell()->web_contents()->GetBrowserContext()->GetResourceContext();
143 } 120 }
144 121
145 virtual void SetUpCommandLine(CommandLine* command_line) { 122 virtual void SetUpCommandLine(CommandLine* command_line) {
146 #ifdef OS_MACOSX 123 #ifdef OS_MACOSX
147 FilePath browser_directory; 124 FilePath browser_directory;
148 PathService::Get(base::DIR_MODULE, &browser_directory); 125 PathService::Get(base::DIR_MODULE, &browser_directory);
149 command_line->AppendSwitchPath(switches::kExtraPluginDir, 126 command_line->AppendSwitchPath(switches::kExtraPluginDir,
150 browser_directory.AppendASCII("plugins")); 127 browser_directory.AppendASCII("plugins"));
151 #endif 128 #endif
152 // TODO(jam): since these plugin tests are running under Chrome, we need to 129 // TODO(jam): since these plugin tests are running under Chrome, we need to
153 // tell it to disable its security features for old plugins. Once this is 130 // tell it to disable its security features for old plugins. Once this is
154 // running under content_browsertests, these flags won't be needed. 131 // running under content_browsertests, these flags won't be needed.
155 // http://crbug.com/90448 132 // http://crbug.com/90448
156 // switches::kAlwaysAuthorizePlugins 133 // switches::kAlwaysAuthorizePlugins
157 command_line->AppendSwitch("always-authorize-plugins"); 134 command_line->AppendSwitch("always-authorize-plugins");
158 } 135 }
159 }; 136 };
160 137
161 // Try to open a channel to the test plugin. Minimal plugin process spawning 138 // Try to open a channel to the test plugin. Minimal plugin process spawning
162 // test for the PluginService interface. 139 // test for the PluginService interface.
163 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToPlugin) { 140 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToPlugin) {
164 if (!webkit::npapi::NPAPIPluginsSupported()) 141 if (!webkit::npapi::NPAPIPluginsSupported())
165 return; 142 return;
166 MockPluginProcessHostClient mock_client(GetResourceContext(), false); 143 MockPluginProcessHostClient mock_client(GetResourceContext());
167 BrowserThread::PostTask(
168 BrowserThread::IO, FROM_HERE,
169 base::Bind(&OpenChannel, &mock_client));
170 RunMessageLoop();
171 }
172
173 IN_PROC_BROWSER_TEST_F(PluginServiceTest, OpenChannelToDeniedPlugin) {
174 if (!webkit::npapi::NPAPIPluginsSupported())
175 return;
176 MockPluginServiceFilter filter;
177 PluginServiceImpl::GetInstance()->SetFilter(&filter);
178 MockPluginProcessHostClient mock_client(GetResourceContext(), true);
179 BrowserThread::PostTask( 144 BrowserThread::PostTask(
180 BrowserThread::IO, FROM_HERE, 145 BrowserThread::IO, FROM_HERE,
181 base::Bind(&OpenChannel, &mock_client)); 146 base::Bind(&OpenChannel, &mock_client));
182 RunMessageLoop(); 147 RunMessageLoop();
183 } 148 }
184 149
185 // A strict mock that fails if any of the methods are called. They shouldn't be 150 // A strict mock that fails if any of the methods are called. They shouldn't be
186 // called since the request should get canceled before then. 151 // called since the request should get canceled before then.
187 class MockCanceledPluginServiceClient : public PluginProcessHost::Client { 152 class MockCanceledPluginServiceClient : public PluginProcessHost::Client {
188 public: 153 public:
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 BrowserThread::IO, FROM_HERE, 335 BrowserThread::IO, FROM_HERE,
371 base::Bind(&OpenChannel, &mock_client)); 336 base::Bind(&OpenChannel, &mock_client));
372 RunMessageLoop(); 337 RunMessageLoop();
373 EXPECT_TRUE(mock_client.get_resource_context_called()); 338 EXPECT_TRUE(mock_client.get_resource_context_called());
374 EXPECT_TRUE(mock_client.set_plugin_info_called()); 339 EXPECT_TRUE(mock_client.set_plugin_info_called());
375 EXPECT_TRUE(mock_client.on_found_plugin_process_host_called()); 340 EXPECT_TRUE(mock_client.on_found_plugin_process_host_called());
376 EXPECT_TRUE(mock_client.on_sent_plugin_channel_request_called()); 341 EXPECT_TRUE(mock_client.on_sent_plugin_channel_request_called());
377 } 342 }
378 343
379 } // namespace content 344 } // 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