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

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

Issue 10387195: Open pepper files directly in browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 const FilePath& plugin_path) { 235 const FilePath& plugin_path) {
236 for (PluginProcessHostIterator iter; !iter.Done(); ++iter) { 236 for (PluginProcessHostIterator iter; !iter.Done(); ++iter) {
237 if (iter->info().path == plugin_path) 237 if (iter->info().path == plugin_path)
238 return *iter; 238 return *iter;
239 } 239 }
240 240
241 return NULL; 241 return NULL;
242 } 242 }
243 243
244 PpapiPluginProcessHost* PluginServiceImpl::FindPpapiPluginProcess( 244 PpapiPluginProcessHost* PluginServiceImpl::FindPpapiPluginProcess(
245 const FilePath& plugin_path) { 245 const FilePath& plugin_path,
246 const FilePath& profile_data_directory_path) {
246 for (PpapiPluginProcessHostIterator iter; !iter.Done(); ++iter) { 247 for (PpapiPluginProcessHostIterator iter; !iter.Done(); ++iter) {
247 if (iter->plugin_path() == plugin_path) 248 if (iter->plugin_path() == plugin_path &&
249 iter->profile_data_directory() == profile_data_directory_path) {
248 return *iter; 250 return *iter;
251 }
249 } 252 }
250
251 return NULL; 253 return NULL;
252 } 254 }
253 255
254 PpapiPluginProcessHost* PluginServiceImpl::FindPpapiBrokerProcess( 256 PpapiPluginProcessHost* PluginServiceImpl::FindPpapiBrokerProcess(
255 const FilePath& broker_path) { 257 const FilePath& broker_path) {
256 for (PpapiBrokerProcessHostIterator iter; !iter.Done(); ++iter) { 258 for (PpapiBrokerProcessHostIterator iter; !iter.Done(); ++iter) {
257 if (iter->plugin_path() == broker_path) 259 if (iter->plugin_path() == broker_path)
258 return *iter; 260 return *iter;
259 } 261 }
260 262
(...skipping 17 matching lines...) Expand all
278 scoped_ptr<PluginProcessHost> new_host(new PluginProcessHost()); 280 scoped_ptr<PluginProcessHost> new_host(new PluginProcessHost());
279 if (!new_host->Init(info)) { 281 if (!new_host->Init(info)) {
280 NOTREACHED(); // Init is not expected to fail. 282 NOTREACHED(); // Init is not expected to fail.
281 return NULL; 283 return NULL;
282 } 284 }
283 return new_host.release(); 285 return new_host.release();
284 } 286 }
285 287
286 PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiPluginProcess( 288 PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiPluginProcess(
287 const FilePath& plugin_path, 289 const FilePath& plugin_path,
290 const FilePath& data_directory_path,
288 PpapiPluginProcessHost::PluginClient* client) { 291 PpapiPluginProcessHost::PluginClient* client) {
289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
290 293
291 PpapiPluginProcessHost* plugin_host = FindPpapiPluginProcess(plugin_path); 294 PpapiPluginProcessHost* plugin_host =
295 FindPpapiPluginProcess(plugin_path, data_directory_path);
292 if (plugin_host) 296 if (plugin_host)
293 return plugin_host; 297 return plugin_host;
294 298
295 // Validate that the plugin is actually registered. 299 // Validate that the plugin is actually registered.
296 content::PepperPluginInfo* info = GetRegisteredPpapiPluginInfo(plugin_path); 300 content::PepperPluginInfo* info = GetRegisteredPpapiPluginInfo(plugin_path);
297 if (!info) 301 if (!info)
298 return NULL; 302 return NULL;
299 303
300 // This plugin isn't loaded by any plugin process, so create a new process. 304 // This plugin isn't loaded by any plugin process, so create a new process.
301 return PpapiPluginProcessHost::CreatePluginHost( 305 return PpapiPluginProcessHost::CreatePluginHost(
302 *info, 306 *info, data_directory_path,
303 client->GetResourceContext()->GetHostResolver()); 307 client->GetResourceContext()->GetHostResolver());
304 } 308 }
305 309
306 PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiBrokerProcess( 310 PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiBrokerProcess(
307 const FilePath& plugin_path) { 311 const FilePath& plugin_path) {
308 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
309 313
310 PpapiPluginProcessHost* plugin_host = FindPpapiBrokerProcess(plugin_path); 314 PpapiPluginProcessHost* plugin_host = FindPpapiBrokerProcess(plugin_path);
311 if (plugin_host) 315 if (plugin_host)
312 return plugin_host; 316 return plugin_host;
(...skipping 27 matching lines...) Expand all
340 render_view_id, 344 render_view_id,
341 page_url, 345 page_url,
342 client->GetResourceContext() 346 client->GetResourceContext()
343 }; 347 };
344 GetPlugins(base::Bind( 348 GetPlugins(base::Bind(
345 &PluginServiceImpl::ForwardGetAllowedPluginForOpenChannelToPlugin, 349 &PluginServiceImpl::ForwardGetAllowedPluginForOpenChannelToPlugin,
346 base::Unretained(this), params, url, mime_type, client)); 350 base::Unretained(this), params, url, mime_type, client));
347 } 351 }
348 352
349 void PluginServiceImpl::OpenChannelToPpapiPlugin( 353 void PluginServiceImpl::OpenChannelToPpapiPlugin(
350 const FilePath& path, 354 const FilePath& plugin_path,
355 const FilePath& data_directory_path,
351 PpapiPluginProcessHost::PluginClient* client) { 356 PpapiPluginProcessHost::PluginClient* client) {
352 PpapiPluginProcessHost* plugin_host = FindOrStartPpapiPluginProcess( 357 PpapiPluginProcessHost* plugin_host =
353 path, client); 358 FindOrStartPpapiPluginProcess(plugin_path, data_directory_path, client);
354 if (plugin_host) { 359 if (plugin_host) {
355 plugin_host->OpenChannelToPlugin(client); 360 plugin_host->OpenChannelToPlugin(client);
356 } else { 361 } else {
357 // Send error. 362 // Send error.
358 client->OnPpapiChannelOpened(IPC::ChannelHandle(), 0); 363 client->OnPpapiChannelOpened(IPC::ChannelHandle(), 0);
359 } 364 }
360 } 365 }
361 366
362 void PluginServiceImpl::OpenChannelToPpapiBroker( 367 void PluginServiceImpl::OpenChannelToPpapiBroker(
363 const FilePath& path, 368 const FilePath& path,
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 plugin_list_->RegisterInternalPlugin(info, add_at_beginning); 732 plugin_list_->RegisterInternalPlugin(info, add_at_beginning);
728 } 733 }
729 734
730 string16 PluginServiceImpl::GetPluginGroupName(const std::string& plugin_name) { 735 string16 PluginServiceImpl::GetPluginGroupName(const std::string& plugin_name) {
731 return plugin_list_->GetPluginGroupName(plugin_name); 736 return plugin_list_->GetPluginGroupName(plugin_name);
732 } 737 }
733 738
734 webkit::npapi::PluginList* PluginServiceImpl::GetPluginList() { 739 webkit::npapi::PluginList* PluginServiceImpl::GetPluginList() {
735 return plugin_list_; 740 return plugin_list_;
736 } 741 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698