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

Side by Side Diff: chrome/plugin/chrome_plugin_host.cc

Issue 79020: linux (and some posix): multiprocess plugins compiling. (Closed)
Patch Set: rebased Created 11 years, 8 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
« no previous file with comments | « chrome/common/transport_dib.h ('k') | chrome/plugin/npobject_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/plugin/chrome_plugin_host.h" 5 #include "chrome/plugin/chrome_plugin_host.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/process_util.h"
11 #include "chrome/common/child_process.h" 12 #include "chrome/common/child_process.h"
12 #include "chrome/common/chrome_constants.h" 13 #include "chrome/common/chrome_constants.h"
13 #include "chrome/common/chrome_plugin_lib.h" 14 #include "chrome/common/chrome_plugin_lib.h"
14 #include "chrome/common/chrome_plugin_util.h" 15 #include "chrome/common/chrome_plugin_util.h"
15 #include "chrome/common/chrome_switches.h" 16 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/plugin_messages.h" 17 #include "chrome/common/plugin_messages.h"
17 #include "chrome/plugin/plugin_thread.h" 18 #include "chrome/plugin/plugin_thread.h"
18 #include "chrome/plugin/webplugin_proxy.h" 19 #include "chrome/plugin/webplugin_proxy.h"
19 #include "net/base/data_url.h" 20 #include "net/base/data_url.h"
20 #include "net/base/upload_data.h" 21 #include "net/base/upload_data.h"
(...skipping 14 matching lines...) Expand all
35 // NOTE: All methods must be called on the Plugin thread. 36 // NOTE: All methods must be called on the Plugin thread.
36 class PluginRequestHandlerProxy 37 class PluginRequestHandlerProxy
37 : public PluginHelper, public ResourceLoaderBridge::Peer { 38 : public PluginHelper, public ResourceLoaderBridge::Peer {
38 public: 39 public:
39 static PluginRequestHandlerProxy* FromCPRequest(CPRequest* request) { 40 static PluginRequestHandlerProxy* FromCPRequest(CPRequest* request) {
40 return ScopableCPRequest::GetData<PluginRequestHandlerProxy*>(request); 41 return ScopableCPRequest::GetData<PluginRequestHandlerProxy*>(request);
41 } 42 }
42 43
43 PluginRequestHandlerProxy(ChromePluginLib* plugin, 44 PluginRequestHandlerProxy(ChromePluginLib* plugin,
44 ScopableCPRequest* cprequest) 45 ScopableCPRequest* cprequest)
45 : PluginHelper(plugin), cprequest_(cprequest), response_data_offset_(0), 46 : PluginHelper(plugin), cprequest_(cprequest), sync_(false),
46 completed_(false), sync_(false), read_buffer_(NULL) { 47 response_data_offset_(0), completed_(false), read_buffer_(NULL) {
47 load_flags_ = PluginResponseUtils::CPLoadFlagsToNetFlags(0); 48 load_flags_ = PluginResponseUtils::CPLoadFlagsToNetFlags(0);
48 cprequest_->data = this; // see FromCPRequest(). 49 cprequest_->data = this; // see FromCPRequest().
49 } 50 }
50 51
51 ~PluginRequestHandlerProxy() { 52 ~PluginRequestHandlerProxy() {
52 if (bridge_.get() && !completed_) { 53 if (bridge_.get() && !completed_) {
53 bridge_->Cancel(); 54 bridge_->Cancel();
54 } 55 }
55 } 56 }
56 57
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 bridge_.reset( 144 bridge_.reset(
144 PluginThread::current()->resource_dispatcher()->CreateBridge( 145 PluginThread::current()->resource_dispatcher()->CreateBridge(
145 cprequest_->method, 146 cprequest_->method,
146 GURL(cprequest_->url), 147 GURL(cprequest_->url),
147 GURL(cprequest_->url), // TODO(jackson): policy url? 148 GURL(cprequest_->url), // TODO(jackson): policy url?
148 GURL(), // TODO(mpcomplete): referrer? 149 GURL(), // TODO(mpcomplete): referrer?
149 "null", // frame_origin 150 "null", // frame_origin
150 "null", // main_frame_origin 151 "null", // main_frame_origin
151 extra_headers_, 152 extra_headers_,
152 load_flags_, 153 load_flags_,
153 GetCurrentProcessId(), 154 base::GetCurrentProcId(),
154 ResourceType::OBJECT, 155 ResourceType::OBJECT,
155 cprequest_->context, 156 cprequest_->context,
156 WebAppCacheContext::kNoAppCacheContextId, 157 WebAppCacheContext::kNoAppCacheContextId,
157 MSG_ROUTING_CONTROL)); 158 MSG_ROUTING_CONTROL));
158 if (!bridge_.get()) 159 if (!bridge_.get())
159 return CPERR_FAILURE; 160 return CPERR_FAILURE;
160 161
161 for (size_t i = 0; i < upload_content_.size(); ++i) { 162 for (size_t i = 0; i < upload_content_.size(); ++i) {
162 switch (upload_content_[i].type()) { 163 switch (upload_content_[i].type()) {
163 case net::UploadData::TYPE_BYTES: { 164 case net::UploadData::TYPE_BYTES: {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 response_headers_, type, buf, buf_size); 201 response_headers_, type, buf, buf_size);
201 } 202 }
202 203
203 int Read(void* buf, uint32 buf_size) { 204 int Read(void* buf, uint32 buf_size) {
204 uint32 avail = 205 uint32 avail =
205 static_cast<uint32>(response_data_.size()) - response_data_offset_; 206 static_cast<uint32>(response_data_.size()) - response_data_offset_;
206 uint32 count = buf_size; 207 uint32 count = buf_size;
207 if (count > avail) 208 if (count > avail)
208 count = avail; 209 count = avail;
209 210
210 int rv = CPERR_FAILURE;
211 if (count) { 211 if (count) {
212 // Data is ready now. 212 // Data is ready now.
213 memcpy(buf, &response_data_[0] + response_data_offset_, count); 213 memcpy(buf, &response_data_[0] + response_data_offset_, count);
214 response_data_offset_ += count; 214 response_data_offset_ += count;
215 } else if (!completed_) { 215 } else if (!completed_) {
216 read_buffer_ = buf; 216 read_buffer_ = buf;
217 read_buffer_size_ = buf_size; 217 read_buffer_size_ = buf_size;
218 DCHECK(!sync_); 218 DCHECK(!sync_);
219 return CPERR_IO_PENDING; 219 return CPERR_IO_PENDING;
220 } 220 }
(...skipping 13 matching lines...) Expand all
234 private: 234 private:
235 scoped_ptr<ScopableCPRequest> cprequest_; 235 scoped_ptr<ScopableCPRequest> cprequest_;
236 scoped_ptr<ResourceLoaderBridge> bridge_; 236 scoped_ptr<ResourceLoaderBridge> bridge_;
237 std::vector<net::UploadData::Element> upload_content_; 237 std::vector<net::UploadData::Element> upload_content_;
238 std::string extra_headers_; 238 std::string extra_headers_;
239 uint32 load_flags_; 239 uint32 load_flags_;
240 bool sync_; 240 bool sync_;
241 241
242 scoped_refptr<net::HttpResponseHeaders> response_headers_; 242 scoped_refptr<net::HttpResponseHeaders> response_headers_;
243 std::string response_data_; 243 std::string response_data_;
244 int response_data_offset_; 244 size_t response_data_offset_;
245 bool completed_; 245 bool completed_;
246 void* read_buffer_; 246 void* read_buffer_;
247 uint32 read_buffer_size_; 247 uint32 read_buffer_size_;
248 }; 248 };
249 249
250 // 250 //
251 // Generic functions 251 // Generic functions
252 // 252 //
253 253
254 void STDCALL CPB_SetKeepProcessAlive(CPID id, CPBool keep_alive) { 254 void STDCALL CPB_SetKeepProcessAlive(CPID id, CPBool keep_alive) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 // 407 //
408 408
409 CPError STDCALL CPB_CreateRequest(CPID id, CPBrowsingContext context, 409 CPError STDCALL CPB_CreateRequest(CPID id, CPBrowsingContext context,
410 const char* method, const char* url, 410 const char* method, const char* url,
411 CPRequest** request) { 411 CPRequest** request) {
412 CHECK(ChromePluginLib::IsPluginThread()); 412 CHECK(ChromePluginLib::IsPluginThread());
413 ChromePluginLib* plugin = ChromePluginLib::FromCPID(id); 413 ChromePluginLib* plugin = ChromePluginLib::FromCPID(id);
414 CHECK(plugin); 414 CHECK(plugin);
415 415
416 ScopableCPRequest* cprequest = new ScopableCPRequest(url, method, context); 416 ScopableCPRequest* cprequest = new ScopableCPRequest(url, method, context);
417 PluginRequestHandlerProxy* handler = 417 new PluginRequestHandlerProxy(plugin, cprequest);
418 new PluginRequestHandlerProxy(plugin, cprequest);
419 418
420 *request = cprequest; 419 *request = cprequest;
421 return CPERR_SUCCESS; 420 return CPERR_SUCCESS;
422 } 421 }
423 422
424 CPError STDCALL CPR_StartRequest(CPRequest* request) { 423 CPError STDCALL CPR_StartRequest(CPRequest* request) {
425 CHECK(ChromePluginLib::IsPluginThread()); 424 CHECK(ChromePluginLib::IsPluginThread());
426 PluginRequestHandlerProxy* handler = 425 PluginRequestHandlerProxy* handler =
427 PluginRequestHandlerProxy::FromCPRequest(request); 426 PluginRequestHandlerProxy::FromCPRequest(request);
428 CHECK(handler); 427 CHECK(handler);
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 613
615 response_funcs.size = sizeof(response_funcs); 614 response_funcs.size = sizeof(response_funcs);
616 response_funcs.received_redirect = CPRR_ReceivedRedirect; 615 response_funcs.received_redirect = CPRR_ReceivedRedirect;
617 response_funcs.start_completed = CPRR_StartCompleted; 616 response_funcs.start_completed = CPRR_StartCompleted;
618 response_funcs.read_completed = CPRR_ReadCompleted; 617 response_funcs.read_completed = CPRR_ReadCompleted;
619 response_funcs.upload_progress = CPRR_UploadProgress; 618 response_funcs.upload_progress = CPRR_UploadProgress;
620 } 619 }
621 620
622 return &browser_funcs; 621 return &browser_funcs;
623 } 622 }
OLDNEW
« no previous file with comments | « chrome/common/transport_dib.h ('k') | chrome/plugin/npobject_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698