| OLD | NEW | 
|---|
| 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/renderer/webplugin_delegate_proxy.h" | 5 #include "chrome/renderer/webplugin_delegate_proxy.h" | 
| 6 | 6 | 
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" | 
| 8 | 8 | 
| 9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) | 
| 10 #include <atlbase.h> | 10 #include <atlbase.h> | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 52 | 52 | 
| 53 using WebKit::WebBindings; | 53 using WebKit::WebBindings; | 
| 54 using WebKit::WebCursorInfo; | 54 using WebKit::WebCursorInfo; | 
| 55 using WebKit::WebInputEvent; | 55 using WebKit::WebInputEvent; | 
| 56 using WebKit::WebDragData; | 56 using WebKit::WebDragData; | 
| 57 using WebKit::WebVector; | 57 using WebKit::WebVector; | 
| 58 using WebKit::WebString; | 58 using WebKit::WebString; | 
| 59 | 59 | 
| 60 // Proxy for WebPluginResourceClient.  The object owns itself after creation, | 60 // Proxy for WebPluginResourceClient.  The object owns itself after creation, | 
| 61 // deleting itself after its callback has been called. | 61 // deleting itself after its callback has been called. | 
| 62 class ResourceClientProxy : public WebPluginResourceClient { | 62 class ResourceClientProxy : public webkit_glue::WebPluginResourceClient { | 
| 63  public: | 63  public: | 
| 64   ResourceClientProxy(PluginChannelHost* channel, int instance_id) | 64   ResourceClientProxy(PluginChannelHost* channel, int instance_id) | 
| 65     : channel_(channel), instance_id_(instance_id), resource_id_(0), | 65     : channel_(channel), instance_id_(instance_id), resource_id_(0), | 
| 66       notify_needed_(false), notify_data_(NULL), | 66       notify_needed_(false), notify_data_(NULL), | 
| 67       multibyte_response_expected_(false) { | 67       multibyte_response_expected_(false) { | 
| 68   } | 68   } | 
| 69 | 69 | 
| 70   ~ResourceClientProxy() { | 70   ~ResourceClientProxy() { | 
| 71   } | 71   } | 
| 72 | 72 | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 155   intptr_t notify_data_; | 155   intptr_t notify_data_; | 
| 156   // Set to true if the response expected is a multibyte response. | 156   // Set to true if the response expected is a multibyte response. | 
| 157   // For e.g. response for a HTTP byte range request. | 157   // For e.g. response for a HTTP byte range request. | 
| 158   bool multibyte_response_expected_; | 158   bool multibyte_response_expected_; | 
| 159 }; | 159 }; | 
| 160 | 160 | 
| 161 WebPluginDelegateProxy* WebPluginDelegateProxy::Create( | 161 WebPluginDelegateProxy* WebPluginDelegateProxy::Create( | 
| 162     const GURL& url, | 162     const GURL& url, | 
| 163     const std::string& mime_type, | 163     const std::string& mime_type, | 
| 164     const std::string& clsid, | 164     const std::string& clsid, | 
| 165     RenderView* render_view) { | 165     const base::WeakPtr<RenderView>& render_view) { | 
| 166   return new WebPluginDelegateProxy(mime_type, clsid, render_view); | 166   return new WebPluginDelegateProxy(mime_type, clsid, render_view); | 
| 167 } | 167 } | 
| 168 | 168 | 
| 169 WebPluginDelegateProxy::WebPluginDelegateProxy(const std::string& mime_type, | 169 WebPluginDelegateProxy::WebPluginDelegateProxy( | 
| 170                                                const std::string& clsid, | 170     const std::string& mime_type, | 
| 171                                                RenderView* render_view) | 171     const std::string& clsid, | 
|  | 172     const base::WeakPtr<RenderView>& render_view) | 
| 172     : render_view_(render_view), | 173     : render_view_(render_view), | 
| 173       plugin_(NULL), | 174       plugin_(NULL), | 
| 174       windowless_(false), | 175       windowless_(false), | 
| 175       window_(NULL), | 176       window_(NULL), | 
| 176       mime_type_(mime_type), | 177       mime_type_(mime_type), | 
| 177       clsid_(clsid), | 178       clsid_(clsid), | 
| 178       npobject_(NULL), | 179       npobject_(NULL), | 
| 179       window_script_object_(NULL), | 180       window_script_object_(NULL), | 
| 180       sad_plugin_(NULL), | 181       sad_plugin_(NULL), | 
| 181       invalidate_pending_(false), | 182       invalidate_pending_(false), | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 214     // Release the channel host now. If we are is the last reference to the | 215     // Release the channel host now. If we are is the last reference to the | 
| 215     // channel, this avoids a race where this renderer asks a new connection to | 216     // channel, this avoids a race where this renderer asks a new connection to | 
| 216     // the same plugin between now and the time 'this' is actually deleted. | 217     // the same plugin between now and the time 'this' is actually deleted. | 
| 217     // Destroying the channel host is what releases the channel name -> FD | 218     // Destroying the channel host is what releases the channel name -> FD | 
| 218     // association on POSIX, and if we ask for a new connection before it is | 219     // association on POSIX, and if we ask for a new connection before it is | 
| 219     // released, the plugin will give us a new FD, and we'll assert when trying | 220     // released, the plugin will give us a new FD, and we'll assert when trying | 
| 220     // to associate it with the channel name. | 221     // to associate it with the channel name. | 
| 221     channel_host_ = NULL; | 222     channel_host_ = NULL; | 
| 222   } | 223   } | 
| 223 | 224 | 
| 224   render_view_->PluginDestroyed(this); |  | 
| 225   MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 225   MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 
| 226 } | 226 } | 
| 227 | 227 | 
| 228 bool WebPluginDelegateProxy::Initialize(const GURL& url, char** argn, | 228 bool WebPluginDelegateProxy::Initialize(const GURL& url, char** argn, | 
| 229                                         char** argv, int argc, | 229                                         char** argv, int argc, | 
| 230                                         WebPlugin* plugin, | 230                                         webkit_glue::WebPlugin* plugin, | 
| 231                                         bool load_manually) { | 231                                         bool load_manually) { | 
| 232   IPC::ChannelHandle channel_handle; | 232   IPC::ChannelHandle channel_handle; | 
| 233   FilePath plugin_path; | 233   FilePath plugin_path; | 
| 234   if (!RenderThread::current()->Send(new ViewHostMsg_OpenChannelToPlugin( | 234   if (!RenderThread::current()->Send(new ViewHostMsg_OpenChannelToPlugin( | 
| 235           url, mime_type_, clsid_, webkit_glue::GetWebKitLocale(), | 235           url, mime_type_, clsid_, webkit_glue::GetWebKitLocale(), | 
| 236           &channel_handle, &plugin_path))) { | 236           &channel_handle, &plugin_path))) { | 
| 237     return false; | 237     return false; | 
| 238   } | 238   } | 
| 239 | 239 | 
| 240 #if defined(OS_POSIX) | 240 #if defined(OS_POSIX) | 
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 874                                           std::string* cookies) { | 874                                           std::string* cookies) { | 
| 875   DCHECK(cookies); | 875   DCHECK(cookies); | 
| 876   if (plugin_) | 876   if (plugin_) | 
| 877     *cookies = plugin_->GetCookies(url, first_party_for_cookies); | 877     *cookies = plugin_->GetCookies(url, first_party_for_cookies); | 
| 878 } | 878 } | 
| 879 | 879 | 
| 880 void WebPluginDelegateProxy::OnShowModalHTMLDialog( | 880 void WebPluginDelegateProxy::OnShowModalHTMLDialog( | 
| 881     const GURL& url, int width, int height, const std::string& json_arguments, | 881     const GURL& url, int width, int height, const std::string& json_arguments, | 
| 882     std::string* json_retval) { | 882     std::string* json_retval) { | 
| 883   DCHECK(json_retval); | 883   DCHECK(json_retval); | 
| 884   if (render_view_) | 884   if (render_view_) { | 
| 885     render_view_->ShowModalHTMLDialog(url, width, height, json_arguments, | 885     render_view_->ShowModalHTMLDialogForPlugin( | 
| 886                                       json_retval); | 886         url, gfx::Size(width, height), json_arguments, json_retval); | 
|  | 887   } | 
| 887 } | 888 } | 
| 888 | 889 | 
| 889 static void EncodeDragData(const WebDragData& data, bool add_data, | 890 static void EncodeDragData(const WebDragData& data, bool add_data, | 
| 890                            NPVariant* drag_type, NPVariant* drag_data) { | 891                            NPVariant* drag_type, NPVariant* drag_data) { | 
| 891   const NPString* np_drag_type; | 892   const NPString* np_drag_type; | 
| 892   if (data.hasFileNames()) { | 893   if (data.hasFileNames()) { | 
| 893     static const NPString kFiles = { "Files", 5 }; | 894     static const NPString kFiles = { "Files", 5 }; | 
| 894     np_drag_type = &kFiles; | 895     np_drag_type = &kFiles; | 
| 895   } else { | 896   } else { | 
| 896     static const NPString kEmpty = { "" , 0 }; | 897     static const NPString kEmpty = { "" , 0 }; | 
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1041     target = params.target.c_str(); | 1042     target = params.target.c_str(); | 
| 1042 | 1043 | 
| 1043   plugin_->HandleURLRequest(params.method.c_str(), | 1044   plugin_->HandleURLRequest(params.method.c_str(), | 
| 1044                             params.is_javascript_url, target, | 1045                             params.is_javascript_url, target, | 
| 1045                             static_cast<unsigned int>(params.buffer.size()), | 1046                             static_cast<unsigned int>(params.buffer.size()), | 
| 1046                             data, params.is_file_data, params.notify, | 1047                             data, params.is_file_data, params.notify, | 
| 1047                             params.url.c_str(), params.notify_data, | 1048                             params.url.c_str(), params.notify_data, | 
| 1048                             params.popups_allowed); | 1049                             params.popups_allowed); | 
| 1049 } | 1050 } | 
| 1050 | 1051 | 
| 1051 WebPluginResourceClient* WebPluginDelegateProxy::CreateResourceClient( | 1052 webkit_glue::WebPluginResourceClient* | 
|  | 1053 WebPluginDelegateProxy::CreateResourceClient( | 
| 1052     int resource_id, const GURL& url, bool notify_needed, | 1054     int resource_id, const GURL& url, bool notify_needed, | 
| 1053     intptr_t notify_data, intptr_t npstream) { | 1055     intptr_t notify_data, intptr_t npstream) { | 
| 1054   ResourceClientProxy* proxy = new ResourceClientProxy(channel_host_, | 1056   ResourceClientProxy* proxy = new ResourceClientProxy(channel_host_, | 
| 1055                                                        instance_id_); | 1057                                                        instance_id_); | 
| 1056   proxy->Initialize(resource_id, url, notify_needed, notify_data, npstream); | 1058   proxy->Initialize(resource_id, url, notify_needed, notify_data, npstream); | 
| 1057   return proxy; | 1059   return proxy; | 
| 1058 } | 1060 } | 
| 1059 | 1061 | 
|  | 1062 bool WebPluginDelegateProxy::IsWindowless() const { | 
|  | 1063   NOTREACHED(); | 
|  | 1064   return false; | 
|  | 1065 } | 
|  | 1066 | 
|  | 1067 gfx::Rect WebPluginDelegateProxy::GetRect() const { | 
|  | 1068   NOTREACHED(); | 
|  | 1069   return gfx::Rect(); | 
|  | 1070 } | 
|  | 1071 | 
|  | 1072 gfx::Rect WebPluginDelegateProxy::GetClipRect() const { | 
|  | 1073   NOTREACHED(); | 
|  | 1074   return gfx::Rect(); | 
|  | 1075 } | 
|  | 1076 | 
|  | 1077 int WebPluginDelegateProxy::GetQuirks() const { | 
|  | 1078   NOTREACHED(); | 
|  | 1079   return 0; | 
|  | 1080 } | 
|  | 1081 | 
| 1060 void WebPluginDelegateProxy::OnCancelDocumentLoad() { | 1082 void WebPluginDelegateProxy::OnCancelDocumentLoad() { | 
| 1061   plugin_->CancelDocumentLoad(); | 1083   plugin_->CancelDocumentLoad(); | 
| 1062 } | 1084 } | 
| 1063 | 1085 | 
| 1064 void WebPluginDelegateProxy::OnInitiateHTTPRangeRequest( | 1086 void WebPluginDelegateProxy::OnInitiateHTTPRangeRequest( | 
| 1065     const std::string& url, const std::string& range_info, | 1087     const std::string& url, const std::string& range_info, | 
| 1066     intptr_t existing_stream, bool notify_needed, intptr_t notify_data) { | 1088     intptr_t existing_stream, bool notify_needed, intptr_t notify_data) { | 
| 1067   plugin_->InitiateHTTPRangeRequest(url.c_str(), range_info.c_str(), | 1089   plugin_->InitiateHTTPRangeRequest(url.c_str(), range_info.c_str(), | 
| 1068                                     existing_stream, notify_needed, | 1090                                     existing_stream, notify_needed, | 
| 1069                                     notify_data); | 1091                                     notify_data); | 
| 1070 } | 1092 } | 
| 1071 | 1093 | 
| 1072 void WebPluginDelegateProxy::OnDeferResourceLoading(int resource_id, | 1094 void WebPluginDelegateProxy::OnDeferResourceLoading(int resource_id, | 
| 1073                                                     bool defer) { | 1095                                                     bool defer) { | 
| 1074   plugin_->SetDeferResourceLoading(resource_id, defer); | 1096   plugin_->SetDeferResourceLoading(resource_id, defer); | 
| 1075 } | 1097 } | 
| OLD | NEW | 
|---|