| 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/renderer/npapi/webplugin_impl.h" | 5 #include "content/renderer/npapi/webplugin_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/debug/crash_logging.h" | 9 #include "base/debug/crash_logging.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 #include "third_party/WebKit/public/web/WebPluginContainer.h" | 50 #include "third_party/WebKit/public/web/WebPluginContainer.h" |
| 51 #include "third_party/WebKit/public/web/WebPluginParams.h" | 51 #include "third_party/WebKit/public/web/WebPluginParams.h" |
| 52 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" | 52 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h" |
| 53 #include "third_party/WebKit/public/web/WebView.h" | 53 #include "third_party/WebKit/public/web/WebView.h" |
| 54 #include "ui/gfx/rect.h" | 54 #include "ui/gfx/rect.h" |
| 55 #include "url/gurl.h" | 55 #include "url/gurl.h" |
| 56 #include "url/url_util.h" | 56 #include "url/url_util.h" |
| 57 #include "webkit/child/multipart_response_delegate.h" | 57 #include "webkit/child/multipart_response_delegate.h" |
| 58 #include "webkit/renderer/compositor_bindings/web_layer_impl.h" | 58 #include "webkit/renderer/compositor_bindings/web_layer_impl.h" |
| 59 | 59 |
| 60 using WebKit::WebCanvas; | 60 using blink::WebCanvas; |
| 61 using WebKit::WebConsoleMessage; | 61 using blink::WebConsoleMessage; |
| 62 using WebKit::WebCookieJar; | 62 using blink::WebCookieJar; |
| 63 using WebKit::WebCString; | 63 using blink::WebCString; |
| 64 using WebKit::WebCursorInfo; | 64 using blink::WebCursorInfo; |
| 65 using WebKit::WebData; | 65 using blink::WebData; |
| 66 using WebKit::WebDataSource; | 66 using blink::WebDataSource; |
| 67 using WebKit::WebFrame; | 67 using blink::WebFrame; |
| 68 using WebKit::WebHTTPBody; | 68 using blink::WebHTTPBody; |
| 69 using WebKit::WebHTTPHeaderVisitor; | 69 using blink::WebHTTPHeaderVisitor; |
| 70 using WebKit::WebInputEvent; | 70 using blink::WebInputEvent; |
| 71 using WebKit::WebKeyboardEvent; | 71 using blink::WebKeyboardEvent; |
| 72 using WebKit::WebMouseEvent; | 72 using blink::WebMouseEvent; |
| 73 using WebKit::WebPluginContainer; | 73 using blink::WebPluginContainer; |
| 74 using WebKit::WebPluginParams; | 74 using blink::WebPluginParams; |
| 75 using WebKit::WebRect; | 75 using blink::WebRect; |
| 76 using WebKit::WebString; | 76 using blink::WebString; |
| 77 using WebKit::WebURL; | 77 using blink::WebURL; |
| 78 using WebKit::WebURLError; | 78 using blink::WebURLError; |
| 79 using WebKit::WebURLLoader; | 79 using blink::WebURLLoader; |
| 80 using WebKit::WebURLLoaderClient; | 80 using blink::WebURLLoaderClient; |
| 81 using WebKit::WebURLLoaderOptions; | 81 using blink::WebURLLoaderOptions; |
| 82 using WebKit::WebURLRequest; | 82 using blink::WebURLRequest; |
| 83 using WebKit::WebURLResponse; | 83 using blink::WebURLResponse; |
| 84 using WebKit::WebVector; | 84 using blink::WebVector; |
| 85 using WebKit::WebView; | 85 using blink::WebView; |
| 86 using webkit_glue::MultipartResponseDelegate; | 86 using webkit_glue::MultipartResponseDelegate; |
| 87 | 87 |
| 88 namespace content { | 88 namespace content { |
| 89 | 89 |
| 90 namespace { | 90 namespace { |
| 91 | 91 |
| 92 // This class handles individual multipart responses. It is instantiated when | 92 // This class handles individual multipart responses. It is instantiated when |
| 93 // we receive HTTP status code 206 in the HTTP response. This indicates | 93 // we receive HTTP status code 206 in the HTTP response. This indicates |
| 94 // that the response could have multiple parts each separated by a boundary | 94 // that the response could have multiple parts each separated by a boundary |
| 95 // specified in the response header. | 95 // specified in the response header. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 if (!content_encoding.isNull() && | 205 if (!content_encoding.isNull() && |
| 206 !EqualsASCII(content_encoding, "identity")) { | 206 !EqualsASCII(content_encoding, "identity")) { |
| 207 // Don't send the compressed content length to the plugin, which only | 207 // Don't send the compressed content length to the plugin, which only |
| 208 // cares about the decoded length. | 208 // cares about the decoded length. |
| 209 response_info->expected_length = 0; | 209 response_info->expected_length = 0; |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 | 212 |
| 213 } // namespace | 213 } // namespace |
| 214 | 214 |
| 215 // WebKit::WebPlugin ---------------------------------------------------------- | 215 // blink::WebPlugin ---------------------------------------------------------- |
| 216 | 216 |
| 217 struct WebPluginImpl::ClientInfo { | 217 struct WebPluginImpl::ClientInfo { |
| 218 unsigned long id; | 218 unsigned long id; |
| 219 WebPluginResourceClient* client; | 219 WebPluginResourceClient* client; |
| 220 WebKit::WebURLRequest request; | 220 blink::WebURLRequest request; |
| 221 bool pending_failure_notification; | 221 bool pending_failure_notification; |
| 222 linked_ptr<WebKit::WebURLLoader> loader; | 222 linked_ptr<blink::WebURLLoader> loader; |
| 223 bool notify_redirects; | 223 bool notify_redirects; |
| 224 bool is_plugin_src_load; | 224 bool is_plugin_src_load; |
| 225 int64 data_offset; | 225 int64 data_offset; |
| 226 }; | 226 }; |
| 227 | 227 |
| 228 bool WebPluginImpl::initialize(WebPluginContainer* container) { | 228 bool WebPluginImpl::initialize(WebPluginContainer* container) { |
| 229 if (!render_view_.get()) { | 229 if (!render_view_.get()) { |
| 230 LOG(ERROR) << "No RenderView"; | 230 LOG(ERROR) << "No RenderView"; |
| 231 return false; | 231 return false; |
| 232 } | 232 } |
| 233 | 233 |
| 234 WebPluginDelegate* plugin_delegate = CreatePluginDelegate(); | 234 WebPluginDelegate* plugin_delegate = CreatePluginDelegate(); |
| 235 if (!plugin_delegate) | 235 if (!plugin_delegate) |
| 236 return false; | 236 return false; |
| 237 | 237 |
| 238 // Store the plugin's unique identifier, used by the container to track its | 238 // Store the plugin's unique identifier, used by the container to track its |
| 239 // script objects. | 239 // script objects. |
| 240 npp_ = plugin_delegate->GetPluginNPP(); | 240 npp_ = plugin_delegate->GetPluginNPP(); |
| 241 | 241 |
| 242 // Set the container before Initialize because the plugin may | 242 // Set the container before Initialize because the plugin may |
| 243 // synchronously call NPN_GetValue to get its container, or make calls | 243 // synchronously call NPN_GetValue to get its container, or make calls |
| 244 // passing script objects that need to be tracked, during initialization. | 244 // passing script objects that need to be tracked, during initialization. |
| 245 SetContainer(container); | 245 SetContainer(container); |
| 246 | 246 |
| 247 bool ok = plugin_delegate->Initialize( | 247 bool ok = plugin_delegate->Initialize( |
| 248 plugin_url_, arg_names_, arg_values_, load_manually_); | 248 plugin_url_, arg_names_, arg_values_, load_manually_); |
| 249 if (!ok) { | 249 if (!ok) { |
| 250 plugin_delegate->PluginDestroyed(); | 250 plugin_delegate->PluginDestroyed(); |
| 251 | 251 |
| 252 WebKit::WebPlugin* replacement_plugin = | 252 blink::WebPlugin* replacement_plugin = |
| 253 GetContentClient()->renderer()->CreatePluginReplacement( | 253 GetContentClient()->renderer()->CreatePluginReplacement( |
| 254 render_view_.get(), file_path_); | 254 render_view_.get(), file_path_); |
| 255 if (!replacement_plugin) | 255 if (!replacement_plugin) |
| 256 return false; | 256 return false; |
| 257 | 257 |
| 258 // Disable scripting by this plugin before replacing it with the new | 258 // Disable scripting by this plugin before replacing it with the new |
| 259 // one. This plugin also needs destroying, so use destroy(), which will | 259 // one. This plugin also needs destroying, so use destroy(), which will |
| 260 // implicitly disable scripting while un-setting the container. | 260 // implicitly disable scripting while un-setting the container. |
| 261 destroy(); | 261 destroy(); |
| 262 | 262 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 279 if (!delegate_) | 279 if (!delegate_) |
| 280 return NULL; | 280 return NULL; |
| 281 | 281 |
| 282 return delegate_->GetPluginScriptableObject(); | 282 return delegate_->GetPluginScriptableObject(); |
| 283 } | 283 } |
| 284 | 284 |
| 285 NPP WebPluginImpl::pluginNPP() { | 285 NPP WebPluginImpl::pluginNPP() { |
| 286 return npp_; | 286 return npp_; |
| 287 } | 287 } |
| 288 | 288 |
| 289 bool WebPluginImpl::getFormValue(WebKit::WebString& value) { | 289 bool WebPluginImpl::getFormValue(blink::WebString& value) { |
| 290 if (!delegate_) | 290 if (!delegate_) |
| 291 return false; | 291 return false; |
| 292 base::string16 form_value; | 292 base::string16 form_value; |
| 293 if (!delegate_->GetFormValue(&form_value)) | 293 if (!delegate_->GetFormValue(&form_value)) |
| 294 return false; | 294 return false; |
| 295 value = form_value; | 295 value = form_value; |
| 296 return true; | 296 return true; |
| 297 } | 297 } |
| 298 | 298 |
| 299 void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& paint_rect) { | 299 void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& paint_rect) { |
| (...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1480 | 1480 |
| 1481 client_index = clients_.erase(client_index); | 1481 client_index = clients_.erase(client_index); |
| 1482 } | 1482 } |
| 1483 | 1483 |
| 1484 // This needs to be called now and not in the destructor since the | 1484 // This needs to be called now and not in the destructor since the |
| 1485 // webframe_ might not be valid anymore. | 1485 // webframe_ might not be valid anymore. |
| 1486 webframe_ = NULL; | 1486 webframe_ = NULL; |
| 1487 weak_factory_.InvalidateWeakPtrs(); | 1487 weak_factory_.InvalidateWeakPtrs(); |
| 1488 } | 1488 } |
| 1489 | 1489 |
| 1490 void WebPluginImpl::SetReferrer(WebKit::WebURLRequest* request, | 1490 void WebPluginImpl::SetReferrer(blink::WebURLRequest* request, |
| 1491 Referrer referrer_flag) { | 1491 Referrer referrer_flag) { |
| 1492 switch (referrer_flag) { | 1492 switch (referrer_flag) { |
| 1493 case DOCUMENT_URL: | 1493 case DOCUMENT_URL: |
| 1494 webframe_->setReferrerForRequest(*request, GURL()); | 1494 webframe_->setReferrerForRequest(*request, GURL()); |
| 1495 break; | 1495 break; |
| 1496 | 1496 |
| 1497 case PLUGIN_SRC: | 1497 case PLUGIN_SRC: |
| 1498 webframe_->setReferrerForRequest(*request, plugin_url_); | 1498 webframe_->setReferrerForRequest(*request, plugin_url_); |
| 1499 break; | 1499 break; |
| 1500 | 1500 |
| 1501 default: | 1501 default: |
| 1502 break; | 1502 break; |
| 1503 } | 1503 } |
| 1504 } | 1504 } |
| 1505 | 1505 |
| 1506 } // namespace content | 1506 } // namespace content |
| OLD | NEW |