| OLD | NEW |
| 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/ppapi_plugin_process_host.h" | 5 #include "content/browser/ppapi_plugin_process_host.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base_switches.h" | 9 #include "base/base_switches.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 107 |
| 108 PpapiPluginProcessHost::~PpapiPluginProcessHost() { | 108 PpapiPluginProcessHost::~PpapiPluginProcessHost() { |
| 109 DVLOG(1) << "PpapiPluginProcessHost" << (is_broker_ ? "[broker]" : "") | 109 DVLOG(1) << "PpapiPluginProcessHost" << (is_broker_ ? "[broker]" : "") |
| 110 << "~PpapiPluginProcessHost()"; | 110 << "~PpapiPluginProcessHost()"; |
| 111 CancelRequests(); | 111 CancelRequests(); |
| 112 } | 112 } |
| 113 | 113 |
| 114 // static | 114 // static |
| 115 PpapiPluginProcessHost* PpapiPluginProcessHost::CreatePluginHost( | 115 PpapiPluginProcessHost* PpapiPluginProcessHost::CreatePluginHost( |
| 116 const PepperPluginInfo& info, | 116 const PepperPluginInfo& info, |
| 117 const base::FilePath& profile_data_directory, | 117 const base::FilePath& profile_data_directory) { |
| 118 net::HostResolver* host_resolver) { | |
| 119 PpapiPluginProcessHost* plugin_host = new PpapiPluginProcessHost( | 118 PpapiPluginProcessHost* plugin_host = new PpapiPluginProcessHost( |
| 120 info, profile_data_directory, host_resolver); | 119 info, profile_data_directory); |
| 121 if (plugin_host->Init(info)) | 120 if (plugin_host->Init(info)) |
| 122 return plugin_host; | 121 return plugin_host; |
| 123 | 122 |
| 124 NOTREACHED(); // Init is not expected to fail. | 123 NOTREACHED(); // Init is not expected to fail. |
| 125 return NULL; | 124 return NULL; |
| 126 } | 125 } |
| 127 | 126 |
| 128 // static | 127 // static |
| 129 PpapiPluginProcessHost* PpapiPluginProcessHost::CreateBrokerHost( | 128 PpapiPluginProcessHost* PpapiPluginProcessHost::CreateBrokerHost( |
| 130 const PepperPluginInfo& info) { | 129 const PepperPluginInfo& info) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 pending_requests_.push_back(client); | 198 pending_requests_.push_back(client); |
| 200 return; | 199 return; |
| 201 } | 200 } |
| 202 | 201 |
| 203 // We already have an open channel, send a request right away to plugin. | 202 // We already have an open channel, send a request right away to plugin. |
| 204 RequestPluginChannel(client); | 203 RequestPluginChannel(client); |
| 205 } | 204 } |
| 206 | 205 |
| 207 PpapiPluginProcessHost::PpapiPluginProcessHost( | 206 PpapiPluginProcessHost::PpapiPluginProcessHost( |
| 208 const PepperPluginInfo& info, | 207 const PepperPluginInfo& info, |
| 209 const base::FilePath& profile_data_directory, | 208 const base::FilePath& profile_data_directory) |
| 210 net::HostResolver* host_resolver) | |
| 211 : permissions_( | 209 : permissions_( |
| 212 ppapi::PpapiPermissions::GetForCommandLine(info.permissions)), | 210 ppapi::PpapiPermissions::GetForCommandLine(info.permissions)), |
| 213 profile_data_directory_(profile_data_directory), | 211 profile_data_directory_(profile_data_directory), |
| 214 is_broker_(false) { | 212 is_broker_(false) { |
| 215 process_.reset(new BrowserChildProcessHostImpl( | 213 process_.reset(new BrowserChildProcessHostImpl( |
| 216 PROCESS_TYPE_PPAPI_PLUGIN, this)); | 214 PROCESS_TYPE_PPAPI_PLUGIN, this)); |
| 217 | 215 |
| 218 filter_ = new PepperMessageFilter(permissions_, host_resolver); | |
| 219 | |
| 220 host_impl_.reset(new BrowserPpapiHostImpl(this, permissions_, info.name, | 216 host_impl_.reset(new BrowserPpapiHostImpl(this, permissions_, info.name, |
| 221 info.path, profile_data_directory, | 217 info.path, profile_data_directory, |
| 222 false, | 218 false)); |
| 223 filter_)); | |
| 224 | 219 |
| 220 filter_ = PepperMessageFilter::CreateOutOfProcess(permissions_); |
| 225 process_->GetHost()->AddFilter(filter_.get()); | 221 process_->GetHost()->AddFilter(filter_.get()); |
| 226 process_->GetHost()->AddFilter(host_impl_->message_filter().get()); | 222 process_->GetHost()->AddFilter(host_impl_->message_filter().get()); |
| 227 | 223 |
| 228 GetContentClient()->browser()->DidCreatePpapiPlugin(host_impl_.get()); | 224 GetContentClient()->browser()->DidCreatePpapiPlugin(host_impl_.get()); |
| 229 | 225 |
| 230 // Only request network status updates if the plugin has dev permissions. | 226 // Only request network status updates if the plugin has dev permissions. |
| 231 if (permissions_.HasPermission(ppapi::PERMISSION_DEV)) | 227 if (permissions_.HasPermission(ppapi::PERMISSION_DEV)) |
| 232 network_observer_.reset(new PluginNetworkObserver(this)); | 228 network_observer_.reset(new PluginNetworkObserver(this)); |
| 233 } | 229 } |
| 234 | 230 |
| 235 PpapiPluginProcessHost::PpapiPluginProcessHost() | 231 PpapiPluginProcessHost::PpapiPluginProcessHost() |
| 236 : is_broker_(true) { | 232 : is_broker_(true) { |
| 237 process_.reset(new BrowserChildProcessHostImpl( | 233 process_.reset(new BrowserChildProcessHostImpl( |
| 238 PROCESS_TYPE_PPAPI_BROKER, this)); | 234 PROCESS_TYPE_PPAPI_BROKER, this)); |
| 239 | 235 |
| 240 ppapi::PpapiPermissions permissions; // No permissions. | 236 ppapi::PpapiPermissions permissions; // No permissions. |
| 241 // The plugin name, path and profile data directory shouldn't be needed for | 237 // The plugin name, path and profile data directory shouldn't be needed for |
| 242 // the broker. | 238 // the broker. |
| 243 host_impl_.reset(new BrowserPpapiHostImpl(this, permissions, | 239 host_impl_.reset(new BrowserPpapiHostImpl(this, permissions, |
| 244 std::string(), base::FilePath(), | 240 std::string(), base::FilePath(), |
| 245 base::FilePath(), | 241 base::FilePath(), |
| 246 false, | 242 false)); |
| 247 NULL)); | |
| 248 } | 243 } |
| 249 | 244 |
| 250 bool PpapiPluginProcessHost::Init(const PepperPluginInfo& info) { | 245 bool PpapiPluginProcessHost::Init(const PepperPluginInfo& info) { |
| 251 plugin_path_ = info.path; | 246 plugin_path_ = info.path; |
| 252 if (info.name.empty()) { | 247 if (info.name.empty()) { |
| 253 process_->SetName(plugin_path_.BaseName().LossyDisplayName()); | 248 process_->SetName(plugin_path_.BaseName().LossyDisplayName()); |
| 254 } else { | 249 } else { |
| 255 process_->SetName(UTF8ToUTF16(info.name)); | 250 process_->SetName(UTF8ToUTF16(info.name)); |
| 256 } | 251 } |
| 257 | 252 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 // sent_requests_ queue should be the one that the plugin just created. | 424 // sent_requests_ queue should be the one that the plugin just created. |
| 430 Client* client = sent_requests_.front(); | 425 Client* client = sent_requests_.front(); |
| 431 sent_requests_.pop(); | 426 sent_requests_.pop(); |
| 432 | 427 |
| 433 const ChildProcessData& data = process_->GetData(); | 428 const ChildProcessData& data = process_->GetData(); |
| 434 client->OnPpapiChannelOpened(channel_handle, base::GetProcId(data.handle), | 429 client->OnPpapiChannelOpened(channel_handle, base::GetProcId(data.handle), |
| 435 data.id); | 430 data.id); |
| 436 } | 431 } |
| 437 | 432 |
| 438 } // namespace content | 433 } // namespace content |
| OLD | NEW |