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

Side by Side Diff: content/renderer/pepper/pepper_plugin_instance_impl.cc

Issue 225903006: PPAPI: Run clang_format.py on content/renderer/pepper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | 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/renderer/pepper/pepper_plugin_instance_impl.h" 5 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 using blink::WebURLRequest; 176 using blink::WebURLRequest;
177 using blink::WebURLResponse; 177 using blink::WebURLResponse;
178 using blink::WebUserGestureIndicator; 178 using blink::WebUserGestureIndicator;
179 using blink::WebUserGestureToken; 179 using blink::WebUserGestureToken;
180 using blink::WebView; 180 using blink::WebView;
181 181
182 namespace content { 182 namespace content {
183 183
184 #if defined(OS_WIN) 184 #if defined(OS_WIN)
185 // Exported by pdf.dll 185 // Exported by pdf.dll
186 typedef bool (*RenderPDFPageToDCProc)( 186 typedef bool (*RenderPDFPageToDCProc)(const unsigned char* pdf_buffer,
187 const unsigned char* pdf_buffer, int buffer_size, int page_number, HDC dc, 187 int buffer_size,
188 int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y, 188 int page_number,
189 int bounds_width, int bounds_height, bool fit_to_bounds, 189 HDC dc,
190 bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds, 190 int dpi_x,
191 bool autorotate); 191 int dpi_y,
192 int bounds_origin_x,
193 int bounds_origin_y,
194 int bounds_width,
195 int bounds_height,
196 bool fit_to_bounds,
197 bool stretch_to_bounds,
198 bool keep_aspect_ratio,
199 bool center_in_bounds,
200 bool autorotate);
192 201
193 void DrawEmptyRectangle(HDC dc) { 202 void DrawEmptyRectangle(HDC dc) {
194 // TODO(sanjeevr): This is a temporary hack. If we output a JPEG 203 // TODO(sanjeevr): This is a temporary hack. If we output a JPEG
195 // to the EMF, the EnumEnhMetaFile call fails in the browser 204 // to the EMF, the EnumEnhMetaFile call fails in the browser
196 // process. The failure also happens if we output nothing here. 205 // process. The failure also happens if we output nothing here.
197 // We need to investigate the reason for this failure and fix it. 206 // We need to investigate the reason for this failure and fix it.
198 // In the meantime this temporary hack of drawing an empty 207 // In the meantime this temporary hack of drawing an empty
199 // rectangle in the DC gets us by. 208 // rectangle in the DC gets us by.
200 Rectangle(dc, 0, 0, 0, 0); 209 Rectangle(dc, 0, 0, 0, 0);
201 } 210 }
202 #endif // defined(OS_WIN) 211 #endif // defined(OS_WIN)
203 212
204 namespace { 213 namespace {
205 214
206 // Check PP_TextInput_Type and ui::TextInputType are kept in sync. 215 // Check PP_TextInput_Type and ui::TextInputType are kept in sync.
207 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == \ 216 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == int(PP_TEXTINPUT_TYPE_NONE),
208 int(PP_TEXTINPUT_TYPE_NONE), mismatching_enums); 217 mismatching_enums);
209 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TEXT) == \ 218 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TEXT) == int(PP_TEXTINPUT_TYPE_TEXT),
210 int(PP_TEXTINPUT_TYPE_TEXT), mismatching_enums); 219 mismatching_enums);
211 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_PASSWORD) == \ 220 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_PASSWORD) ==
212 int(PP_TEXTINPUT_TYPE_PASSWORD), mismatching_enums); 221 int(PP_TEXTINPUT_TYPE_PASSWORD),
213 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_SEARCH) == \ 222 mismatching_enums);
214 int(PP_TEXTINPUT_TYPE_SEARCH), mismatching_enums); 223 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_SEARCH) == int(PP_TEXTINPUT_TYPE_SEARCH),
215 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_EMAIL) == \ 224 mismatching_enums);
216 int(PP_TEXTINPUT_TYPE_EMAIL), mismatching_enums); 225 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_EMAIL) == int(PP_TEXTINPUT_TYPE_EMAIL),
217 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NUMBER) == \ 226 mismatching_enums);
218 int(PP_TEXTINPUT_TYPE_NUMBER), mismatching_enums); 227 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NUMBER) == int(PP_TEXTINPUT_TYPE_NUMBER),
219 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TELEPHONE) == \ 228 mismatching_enums);
220 int(PP_TEXTINPUT_TYPE_TELEPHONE), mismatching_enums); 229 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TELEPHONE) ==
221 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_URL) == \ 230 int(PP_TEXTINPUT_TYPE_TELEPHONE),
222 int(PP_TEXTINPUT_TYPE_URL), mismatching_enums); 231 mismatching_enums);
232 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_URL) == int(PP_TEXTINPUT_TYPE_URL),
233 mismatching_enums);
223 234
224 // The default text input type is to regard the plugin always accept text input. 235 // The default text input type is to regard the plugin always accept text input.
225 // This is for allowing users to use input methods even on completely-IME- 236 // This is for allowing users to use input methods even on completely-IME-
226 // unaware plugins (e.g., PPAPI Flash or PDF plugin for M16). 237 // unaware plugins (e.g., PPAPI Flash or PDF plugin for M16).
227 // Plugins need to explicitly opt out the text input mode if they know 238 // Plugins need to explicitly opt out the text input mode if they know
228 // that they don't accept texts. 239 // that they don't accept texts.
229 const ui::TextInputType kPluginDefaultTextInputType = ui::TEXT_INPUT_TYPE_TEXT; 240 const ui::TextInputType kPluginDefaultTextInputType = ui::TEXT_INPUT_TYPE_TEXT;
230 241
231 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \ 242 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \
232 COMPILE_ASSERT(static_cast<int>(WebCursorInfo::webkit_name) \ 243 COMPILE_ASSERT(static_cast<int>(WebCursorInfo::webkit_name) == \
233 == static_cast<int>(np_name), \ 244 static_cast<int>(np_name), \
234 mismatching_enums) 245 mismatching_enums)
235 246
236 #define COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(webkit_name, pp_name) \ 247 #define COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(webkit_name, pp_name) \
237 COMPILE_ASSERT(static_cast<int>(webkit_name) \ 248 COMPILE_ASSERT(static_cast<int>(webkit_name) == static_cast<int>(pp_name), \
238 == static_cast<int>(pp_name), \ 249 mismatching_enums)
239 mismatching_enums)
240 250
241 // <embed>/<object> attributes. 251 // <embed>/<object> attributes.
242 const char kWidth[] = "width"; 252 const char kWidth[] = "width";
243 const char kHeight[] = "height"; 253 const char kHeight[] = "height";
244 const char kBorder[] = "border"; // According to w3c, deprecated. 254 const char kBorder[] = "border"; // According to w3c, deprecated.
245 const char kStyle[] = "style"; 255 const char kStyle[] = "style";
246 256
247 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_MOUSECURSOR_TYPE_POINTER); 257 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_MOUSECURSOR_TYPE_POINTER);
248 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_MOUSECURSOR_TYPE_CROSS); 258 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_MOUSECURSOR_TYPE_CROSS);
249 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_MOUSECURSOR_TYPE_HAND); 259 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_MOUSECURSOR_TYPE_HAND);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 COMPILE_ASSERT_MATCHING_ENUM(TypeGrabbing, PP_MOUSECURSOR_TYPE_GRABBING); 316 COMPILE_ASSERT_MATCHING_ENUM(TypeGrabbing, PP_MOUSECURSOR_TYPE_GRABBING);
307 // Do not assert WebCursorInfo::TypeCustom == PP_CURSORTYPE_CUSTOM; 317 // Do not assert WebCursorInfo::TypeCustom == PP_CURSORTYPE_CUSTOM;
308 // PP_CURSORTYPE_CUSTOM is pinned to allow new cursor types. 318 // PP_CURSORTYPE_CUSTOM is pinned to allow new cursor types.
309 319
310 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(blink::WebPrintScalingOptionNone, 320 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(blink::WebPrintScalingOptionNone,
311 PP_PRINTSCALINGOPTION_NONE); 321 PP_PRINTSCALINGOPTION_NONE);
312 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM( 322 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(
313 blink::WebPrintScalingOptionFitToPrintableArea, 323 blink::WebPrintScalingOptionFitToPrintableArea,
314 PP_PRINTSCALINGOPTION_FIT_TO_PRINTABLE_AREA); 324 PP_PRINTSCALINGOPTION_FIT_TO_PRINTABLE_AREA);
315 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM( 325 COMPILE_ASSERT_PRINT_SCALING_MATCHING_ENUM(
316 blink::WebPrintScalingOptionSourceSize, PP_PRINTSCALINGOPTION_SOURCE_SIZE); 326 blink::WebPrintScalingOptionSourceSize,
327 PP_PRINTSCALINGOPTION_SOURCE_SIZE);
317 328
318 // Sets |*security_origin| to be the WebKit security origin associated with the 329 // Sets |*security_origin| to be the WebKit security origin associated with the
319 // document containing the given plugin instance. On success, returns true. If 330 // document containing the given plugin instance. On success, returns true. If
320 // the instance is invalid, returns false and |*security_origin| will be 331 // the instance is invalid, returns false and |*security_origin| will be
321 // unchanged. 332 // unchanged.
322 bool SecurityOriginForInstance(PP_Instance instance_id, 333 bool SecurityOriginForInstance(PP_Instance instance_id,
323 blink::WebSecurityOrigin* security_origin) { 334 blink::WebSecurityOrigin* security_origin) {
324 PepperPluginInstanceImpl* instance = 335 PepperPluginInstanceImpl* instance =
325 HostGlobals::Get()->GetInstance(instance_id); 336 HostGlobals::Get()->GetInstance(instance_id);
326 if (!instance) 337 if (!instance)
327 return false; 338 return false;
328 339
329 WebElement plugin_element = instance->container()->element(); 340 WebElement plugin_element = instance->container()->element();
330 *security_origin = plugin_element.document().securityOrigin(); 341 *security_origin = plugin_element.document().securityOrigin();
331 return true; 342 return true;
332 } 343 }
333 344
334 // Convert the given vector to an array of C-strings. The strings in the 345 // Convert the given vector to an array of C-strings. The strings in the
335 // returned vector are only guaranteed valid so long as the vector of strings 346 // returned vector are only guaranteed valid so long as the vector of strings
336 // is not modified. 347 // is not modified.
337 scoped_ptr<const char*[]> StringVectorToArgArray( 348 scoped_ptr<const char* []> StringVectorToArgArray(
338 const std::vector<std::string>& vector) { 349 const std::vector<std::string>& vector) {
339 scoped_ptr<const char*[]> array(new const char*[vector.size()]); 350 scoped_ptr<const char * []> array(new const char* [vector.size()]);
340 for (size_t i = 0; i < vector.size(); ++i) 351 for (size_t i = 0; i < vector.size(); ++i)
341 array[i] = vector[i].c_str(); 352 array[i] = vector[i].c_str();
342 return array.Pass(); 353 return array.Pass();
343 } 354 }
344 355
345 // Returns true if this is a "system reserved" key which should not be sent to 356 // Returns true if this is a "system reserved" key which should not be sent to
346 // a plugin. Some poorly behaving plugins (like Flash) incorrectly report that 357 // a plugin. Some poorly behaving plugins (like Flash) incorrectly report that
347 // they handle all keys sent to them. This can prevent keystrokes from working 358 // they handle all keys sent to them. This can prevent keystrokes from working
348 // for things like screen brightness and volume control. 359 // for things like screen brightness and volume control.
349 bool IsReservedSystemInputEvent(const blink::WebInputEvent& event) { 360 bool IsReservedSystemInputEvent(const blink::WebInputEvent& event) {
(...skipping 21 matching lines...) Expand all
371 382
372 class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget { 383 class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget {
373 public: 384 public:
374 PluginInstanceLockTarget(PepperPluginInstanceImpl* plugin) 385 PluginInstanceLockTarget(PepperPluginInstanceImpl* plugin)
375 : plugin_(plugin) {} 386 : plugin_(plugin) {}
376 387
377 virtual void OnLockMouseACK(bool succeeded) OVERRIDE { 388 virtual void OnLockMouseACK(bool succeeded) OVERRIDE {
378 plugin_->OnLockMouseACK(succeeded); 389 plugin_->OnLockMouseACK(succeeded);
379 } 390 }
380 391
381 virtual void OnMouseLockLost() OVERRIDE { 392 virtual void OnMouseLockLost() OVERRIDE { plugin_->OnMouseLockLost(); }
382 plugin_->OnMouseLockLost();
383 }
384 393
385 virtual bool HandleMouseLockedInputEvent( 394 virtual bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event)
386 const blink::WebMouseEvent &event) OVERRIDE { 395 OVERRIDE {
387 plugin_->HandleMouseLockedInputEvent(event); 396 plugin_->HandleMouseLockedInputEvent(event);
388 return true; 397 return true;
389 } 398 }
390 399
391 private: 400 private:
392 PepperPluginInstanceImpl* plugin_; 401 PepperPluginInstanceImpl* plugin_;
393 }; 402 };
394 403
395
396 } // namespace 404 } // namespace
397 405
398 // static 406 // static
399 PepperPluginInstanceImpl* PepperPluginInstanceImpl::Create( 407 PepperPluginInstanceImpl* PepperPluginInstanceImpl::Create(
400 RenderFrameImpl* render_frame, 408 RenderFrameImpl* render_frame,
401 PluginModule* module, 409 PluginModule* module,
402 WebPluginContainer* container, 410 WebPluginContainer* container,
403 const GURL& plugin_url) { 411 const GURL& plugin_url) {
404 base::Callback<const void*(const char*)> get_plugin_interface_func = 412 base::Callback<const void*(const char*)> get_plugin_interface_func =
405 base::Bind(&PluginModule::GetPluginInterface, module); 413 base::Bind(&PluginModule::GetPluginInterface, module);
406 PPP_Instance_Combined* ppp_instance_combined = 414 PPP_Instance_Combined* ppp_instance_combined =
407 PPP_Instance_Combined::Create(get_plugin_interface_func); 415 PPP_Instance_Combined::Create(get_plugin_interface_func);
408 if (!ppp_instance_combined) 416 if (!ppp_instance_combined)
409 return NULL; 417 return NULL;
410 return new PepperPluginInstanceImpl(render_frame, module, 418 return new PepperPluginInstanceImpl(
411 ppp_instance_combined, container, 419 render_frame, module, ppp_instance_combined, container, plugin_url);
412 plugin_url);
413 } 420 }
414 421
415 PepperPluginInstanceImpl::ExternalDocumentLoader::ExternalDocumentLoader() 422 PepperPluginInstanceImpl::ExternalDocumentLoader::ExternalDocumentLoader()
416 : finished_loading_(false) { 423 : finished_loading_(false) {}
417 }
418 424
419 PepperPluginInstanceImpl::ExternalDocumentLoader::~ExternalDocumentLoader() { 425 PepperPluginInstanceImpl::ExternalDocumentLoader::~ExternalDocumentLoader() {}
420 }
421 426
422 void PepperPluginInstanceImpl::ExternalDocumentLoader::ReplayReceivedData( 427 void PepperPluginInstanceImpl::ExternalDocumentLoader::ReplayReceivedData(
423 WebURLLoaderClient* document_loader) { 428 WebURLLoaderClient* document_loader) {
424 for (std::list<std::string>::iterator it = data_.begin(); 429 for (std::list<std::string>::iterator it = data_.begin(); it != data_.end();
425 it != data_.end(); ++it) { 430 ++it) {
426 document_loader->didReceiveData(NULL, it->c_str(), it->length(), 431 document_loader->didReceiveData(
427 0 /* encoded_data_length */); 432 NULL, it->c_str(), it->length(), 0 /* encoded_data_length */);
428 } 433 }
429 if (finished_loading_) { 434 if (finished_loading_) {
430 document_loader->didFinishLoading(NULL, 0 /* finish_time */, 435 document_loader->didFinishLoading(
436 NULL,
437 0 /* finish_time */,
431 blink::WebURLLoaderClient::kUnknownEncodedDataLength); 438 blink::WebURLLoaderClient::kUnknownEncodedDataLength);
432 } 439 }
433 if (error_.get()) { 440 if (error_.get()) {
434 document_loader->didFail(NULL, *error_); 441 document_loader->didFail(NULL, *error_);
435 } 442 }
436 } 443 }
437 444
438 void PepperPluginInstanceImpl::ExternalDocumentLoader::didReceiveData( 445 void PepperPluginInstanceImpl::ExternalDocumentLoader::didReceiveData(
439 WebURLLoader* loader, 446 WebURLLoader* loader,
440 const char* data, 447 const char* data,
(...skipping 11 matching lines...) Expand all
452 } 459 }
453 460
454 void PepperPluginInstanceImpl::ExternalDocumentLoader::didFail( 461 void PepperPluginInstanceImpl::ExternalDocumentLoader::didFail(
455 WebURLLoader* loader, 462 WebURLLoader* loader,
456 const WebURLError& error) { 463 const WebURLError& error) {
457 DCHECK(!error_.get()); 464 DCHECK(!error_.get());
458 error_.reset(new WebURLError(error)); 465 error_.reset(new WebURLError(error));
459 } 466 }
460 467
461 PepperPluginInstanceImpl::GamepadImpl::GamepadImpl() 468 PepperPluginInstanceImpl::GamepadImpl::GamepadImpl()
462 : Resource(ppapi::Resource::Untracked()) { 469 : Resource(ppapi::Resource::Untracked()) {}
463 }
464 470
465 PepperPluginInstanceImpl::GamepadImpl::~GamepadImpl() { 471 PepperPluginInstanceImpl::GamepadImpl::~GamepadImpl() {}
466 }
467 472
468 PPB_Gamepad_API* PepperPluginInstanceImpl::GamepadImpl::AsPPB_Gamepad_API() { 473 PPB_Gamepad_API* PepperPluginInstanceImpl::GamepadImpl::AsPPB_Gamepad_API() {
469 return this; 474 return this;
470 } 475 }
471 476
472 void PepperPluginInstanceImpl::GamepadImpl::Sample( 477 void PepperPluginInstanceImpl::GamepadImpl::Sample(
473 PP_Instance instance, 478 PP_Instance instance,
474 PP_GamepadsSampleData* data) { 479 PP_GamepadsSampleData* data) {
475 blink::WebGamepads webkit_data; 480 blink::WebGamepads webkit_data;
476 RenderThreadImpl::current()->SampleGamepads(&webkit_data); 481 RenderThreadImpl::current()->SampleGamepads(&webkit_data);
477 ConvertWebKitGamepadData( 482 ConvertWebKitGamepadData(bit_cast<ppapi::WebKitGamepads>(webkit_data), data);
478 bit_cast<ppapi::WebKitGamepads>(webkit_data), data);
479 } 483 }
480 484
481 PepperPluginInstanceImpl::PepperPluginInstanceImpl( 485 PepperPluginInstanceImpl::PepperPluginInstanceImpl(
482 RenderFrameImpl* render_frame, 486 RenderFrameImpl* render_frame,
483 PluginModule* module, 487 PluginModule* module,
484 ppapi::PPP_Instance_Combined* instance_interface, 488 ppapi::PPP_Instance_Combined* instance_interface,
485 WebPluginContainer* container, 489 WebPluginContainer* container,
486 const GURL& plugin_url) 490 const GURL& plugin_url)
487 : RenderFrameObserver(render_frame), 491 : RenderFrameObserver(render_frame),
488 render_frame_(render_frame), 492 render_frame_(render_frame),
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 DCHECK(!fullscreen_container_); 594 DCHECK(!fullscreen_container_);
591 595
592 // Free all the plugin objects. This will automatically clear the back- 596 // Free all the plugin objects. This will automatically clear the back-
593 // pointer from the NPObject so WebKit can't call into the plugin any more. 597 // pointer from the NPObject so WebKit can't call into the plugin any more.
594 // 598 //
595 // Swap out the set so we can delete from it (the objects will try to 599 // Swap out the set so we can delete from it (the objects will try to
596 // unregister themselves inside the delete call). 600 // unregister themselves inside the delete call).
597 PluginObjectSet plugin_object_copy; 601 PluginObjectSet plugin_object_copy;
598 live_plugin_objects_.swap(plugin_object_copy); 602 live_plugin_objects_.swap(plugin_object_copy);
599 for (PluginObjectSet::iterator i = plugin_object_copy.begin(); 603 for (PluginObjectSet::iterator i = plugin_object_copy.begin();
600 i != plugin_object_copy.end(); ++i) 604 i != plugin_object_copy.end();
605 ++i)
601 delete *i; 606 delete *i;
602 607
603 if (TrackedCallback::IsPending(lock_mouse_callback_)) 608 if (TrackedCallback::IsPending(lock_mouse_callback_))
604 lock_mouse_callback_->Abort(); 609 lock_mouse_callback_->Abort();
605 610
606 if (!instance_deleted_callback_.is_null()) 611 if (!instance_deleted_callback_.is_null())
607 instance_deleted_callback_.Run(); 612 instance_deleted_callback_.Run();
608 613
609 if (!module_->IsProxied() && render_frame_) { 614 if (!module_->IsProxied() && render_frame_) {
610 PepperBrowserConnection* browser_connection = 615 PepperBrowserConnection* browser_connection =
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 fullscreen_container_ = NULL; 665 fullscreen_container_ = NULL;
661 } 666 }
662 667
663 // Force-unbind any Graphics. In the case of Graphics2D, if the plugin 668 // Force-unbind any Graphics. In the case of Graphics2D, if the plugin
664 // leaks the graphics 2D, it may actually get cleaned up after our 669 // leaks the graphics 2D, it may actually get cleaned up after our
665 // destruction, so we need its pointers to be up-to-date. 670 // destruction, so we need its pointers to be up-to-date.
666 BindGraphics(pp_instance(), 0); 671 BindGraphics(pp_instance(), 0);
667 container_ = NULL; 672 container_ = NULL;
668 } 673 }
669 674
670 bool PepperPluginInstanceImpl::is_deleted() const { 675 bool PepperPluginInstanceImpl::is_deleted() const { return is_deleted_; }
671 return is_deleted_;
672 }
673 676
674 void PepperPluginInstanceImpl::Paint(WebCanvas* canvas, 677 void PepperPluginInstanceImpl::Paint(WebCanvas* canvas,
675 const gfx::Rect& plugin_rect, 678 const gfx::Rect& plugin_rect,
676 const gfx::Rect& paint_rect) { 679 const gfx::Rect& paint_rect) {
677 TRACE_EVENT0("ppapi", "PluginInstance::Paint"); 680 TRACE_EVENT0("ppapi", "PluginInstance::Paint");
678 if (module()->is_crashed()) { 681 if (module()->is_crashed()) {
679 // Crashed plugin painting. 682 // Crashed plugin painting.
680 if (!sad_plugin_) // Lazily initialize bitmap. 683 if (!sad_plugin_) // Lazily initialize bitmap.
681 sad_plugin_ = GetContentClient()->renderer()->GetSadPluginBitmap(); 684 sad_plugin_ = GetContentClient()->renderer()->GetSadPluginBitmap();
682 if (sad_plugin_) 685 if (sad_plugin_)
683 PaintSadPlugin(canvas, plugin_rect, *sad_plugin_); 686 PaintSadPlugin(canvas, plugin_rect, *sad_plugin_);
684 return; 687 return;
685 } 688 }
686 689
687 if (bound_graphics_2d_platform_) 690 if (bound_graphics_2d_platform_)
688 bound_graphics_2d_platform_->Paint(canvas, plugin_rect, paint_rect); 691 bound_graphics_2d_platform_->Paint(canvas, plugin_rect, paint_rect);
689 } 692 }
690 693
691 void PepperPluginInstanceImpl::InvalidateRect(const gfx::Rect& rect) { 694 void PepperPluginInstanceImpl::InvalidateRect(const gfx::Rect& rect) {
692 if (fullscreen_container_) { 695 if (fullscreen_container_) {
693 if (rect.IsEmpty()) 696 if (rect.IsEmpty())
694 fullscreen_container_->Invalidate(); 697 fullscreen_container_->Invalidate();
695 else 698 else
696 fullscreen_container_->InvalidateRect(rect); 699 fullscreen_container_->InvalidateRect(rect);
697 } else { 700 } else {
698 if (!container_ || 701 if (!container_ || view_data_.rect.size.width == 0 ||
699 view_data_.rect.size.width == 0 || view_data_.rect.size.height == 0) 702 view_data_.rect.size.height == 0)
700 return; // Nothing to do. 703 return; // Nothing to do.
701 if (rect.IsEmpty()) 704 if (rect.IsEmpty())
702 container_->invalidate(); 705 container_->invalidate();
703 else 706 else
704 container_->invalidateRect(rect); 707 container_->invalidateRect(rect);
705 } 708 }
706 if (texture_layer_) { 709 if (texture_layer_) {
707 if (rect.IsEmpty()) { 710 if (rect.IsEmpty()) {
708 texture_layer_->SetNeedsDisplay(); 711 texture_layer_->SetNeedsDisplay();
709 } else { 712 } else {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 } 765 }
763 766
764 if (render_frame_) 767 if (render_frame_)
765 render_frame_->PluginCrashed(module_->path(), module_->GetPeerProcessId()); 768 render_frame_->PluginCrashed(module_->path(), module_->GetPeerProcessId());
766 UnSetAndDeleteLockTargetAdapter(); 769 UnSetAndDeleteLockTargetAdapter();
767 } 770 }
768 771
769 static void SetGPUHistogram(const ppapi::Preferences& prefs, 772 static void SetGPUHistogram(const ppapi::Preferences& prefs,
770 const std::vector<std::string>& arg_names, 773 const std::vector<std::string>& arg_names,
771 const std::vector<std::string>& arg_values) { 774 const std::vector<std::string>& arg_values) {
772 // Calculate a histogram to let us determine how likely people are to try to 775 // Calculate a histogram to let us determine how likely people are to try to
773 // run Stage3D content on machines that have it blacklisted. 776 // run Stage3D content on machines that have it blacklisted.
bbudge 2014/04/07 17:02:17 Comment aligned to #if here, probably should be mo
774 #if defined(OS_WIN) 777 #if defined(OS_WIN)
775 bool needs_gpu = false; 778 bool needs_gpu = false;
776 bool is_xp = base::win::GetVersion() <= base::win::VERSION_XP; 779 bool is_xp = base::win::GetVersion() <= base::win::VERSION_XP;
777 780
778 for (size_t i = 0; i < arg_names.size(); i++) { 781 for (size_t i = 0; i < arg_names.size(); i++) {
779 if (arg_names[i] == "wmode") { 782 if (arg_names[i] == "wmode") {
780 // In theory content other than Flash could have a "wmode" argument, 783 // In theory content other than Flash could have a "wmode" argument,
781 // but that's pretty unlikely. 784 // but that's pretty unlikely.
782 if (arg_values[i] == "direct" || arg_values[i] == "gpu") 785 if (arg_values[i] == "direct" || arg_values[i] == "gpu")
783 needs_gpu = true; 786 needs_gpu = true;
784 break; 787 break;
785 } 788 }
786 } 789 }
787 // 0 : No 3D content and GPU is blacklisted 790 // 0 : No 3D content and GPU is blacklisted
788 // 1 : No 3D content and GPU is not blacklisted 791 // 1 : No 3D content and GPU is not blacklisted
789 // 2 : 3D content but GPU is blacklisted 792 // 2 : 3D content but GPU is blacklisted
790 // 3 : 3D content and GPU is not blacklisted 793 // 3 : 3D content and GPU is not blacklisted
791 // 4 : No 3D content and GPU is blacklisted on XP 794 // 4 : No 3D content and GPU is blacklisted on XP
792 // 5 : No 3D content and GPU is not blacklisted on XP 795 // 5 : No 3D content and GPU is not blacklisted on XP
793 // 6 : 3D content but GPU is blacklisted on XP 796 // 6 : 3D content but GPU is blacklisted on XP
794 // 7 : 3D content and GPU is not blacklisted on XP 797 // 7 : 3D content and GPU is not blacklisted on XP
795 UMA_HISTOGRAM_ENUMERATION("Flash.UsesGPU", 798 UMA_HISTOGRAM_ENUMERATION(
796 is_xp * 4 + needs_gpu * 2 + prefs.is_webgl_supported, 8); 799 "Flash.UsesGPU", is_xp * 4 + needs_gpu * 2 + prefs.is_webgl_supported, 8);
797 #endif 800 #endif
798 } 801 }
799 802
800 bool PepperPluginInstanceImpl::Initialize( 803 bool PepperPluginInstanceImpl::Initialize(
801 const std::vector<std::string>& arg_names, 804 const std::vector<std::string>& arg_names,
802 const std::vector<std::string>& arg_values, 805 const std::vector<std::string>& arg_values,
803 bool full_frame) { 806 bool full_frame) {
804 if (!render_frame_) 807 if (!render_frame_)
805 return false; 808 return false;
806 message_channel_.reset(new MessageChannel(this)); 809 message_channel_.reset(new MessageChannel(this));
807 810
808 full_frame_ = full_frame; 811 full_frame_ = full_frame;
809 812
810 UpdateTouchEventRequest(); 813 UpdateTouchEventRequest();
811 container_->setWantsWheelEvents(IsAcceptingWheelEvents()); 814 container_->setWantsWheelEvents(IsAcceptingWheelEvents());
812 815
813 SetGPUHistogram(ppapi::Preferences( 816 SetGPUHistogram(
814 render_frame_->render_view()->webkit_preferences()), 817 ppapi::Preferences(render_frame_->render_view()->webkit_preferences()),
815 arg_names, arg_values); 818 arg_names,
819 arg_values);
816 820
817 argn_ = arg_names; 821 argn_ = arg_names;
818 argv_ = arg_values; 822 argv_ = arg_values;
819 scoped_ptr<const char*[]> argn_array(StringVectorToArgArray(argn_)); 823 scoped_ptr<const char * []> argn_array(StringVectorToArgArray(argn_));
820 scoped_ptr<const char*[]> argv_array(StringVectorToArgArray(argv_)); 824 scoped_ptr<const char * []> argv_array(StringVectorToArgArray(argv_));
821 bool success = PP_ToBool(instance_interface_->DidCreate(pp_instance(), 825 bool success = PP_ToBool(instance_interface_->DidCreate(
822 argn_.size(), 826 pp_instance(), argn_.size(), argn_array.get(), argv_array.get()));
823 argn_array.get(),
824 argv_array.get()));
825 if (success) 827 if (success)
826 message_channel_->StopQueueingJavaScriptMessages(); 828 message_channel_->StopQueueingJavaScriptMessages();
827 return success; 829 return success;
828 } 830 }
829 831
830 bool PepperPluginInstanceImpl::HandleDocumentLoad( 832 bool PepperPluginInstanceImpl::HandleDocumentLoad(
831 const blink::WebURLResponse& response) { 833 const blink::WebURLResponse& response) {
832 DCHECK(!document_loader_); 834 DCHECK(!document_loader_);
833 if (external_document_load_) { 835 if (external_document_load_) {
834 // The external proxy isn't available, so save the response and record 836 // The external proxy isn't available, so save the response and record
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 response, 878 response,
877 pending_host_id)); 879 pending_host_id));
878 880
879 // If the load was not abandoned, document_loader_ will now be set. It's 881 // If the load was not abandoned, document_loader_ will now be set. It's
880 // possible that the load was canceled by now and document_loader_ was 882 // possible that the load was canceled by now and document_loader_ was
881 // already nulled out. 883 // already nulled out.
882 return true; 884 return true;
883 } 885 }
884 886
885 bool PepperPluginInstanceImpl::SendCompositionEventToPlugin( 887 bool PepperPluginInstanceImpl::SendCompositionEventToPlugin(
886 PP_InputEvent_Type type, const base::string16& text) { 888 PP_InputEvent_Type type,
889 const base::string16& text) {
887 std::vector<blink::WebCompositionUnderline> empty; 890 std::vector<blink::WebCompositionUnderline> empty;
888 return SendCompositionEventWithUnderlineInformationToPlugin( 891 return SendCompositionEventWithUnderlineInformationToPlugin(
889 type, text, empty, static_cast<int>(text.size()), 892 type,
893 text,
894 empty,
895 static_cast<int>(text.size()),
890 static_cast<int>(text.size())); 896 static_cast<int>(text.size()));
891 } 897 }
892 898
893 bool PepperPluginInstanceImpl:: 899 bool
894 SendCompositionEventWithUnderlineInformationToPlugin( 900 PepperPluginInstanceImpl::SendCompositionEventWithUnderlineInformationToPlugin(
895 PP_InputEvent_Type type, 901 PP_InputEvent_Type type,
896 const base::string16& text, 902 const base::string16& text,
897 const std::vector<blink::WebCompositionUnderline>& underlines, 903 const std::vector<blink::WebCompositionUnderline>& underlines,
898 int selection_start, 904 int selection_start,
899 int selection_end) { 905 int selection_end) {
900 // Keep a reference on the stack. See NOTE above. 906 // Keep a reference on the stack. See NOTE above.
901 scoped_refptr<PepperPluginInstanceImpl> ref(this); 907 scoped_refptr<PepperPluginInstanceImpl> ref(this);
902 908
903 if (!LoadInputEventInterface()) 909 if (!LoadInputEventInterface())
904 return false; 910 return false;
905 911
906 PP_InputEvent_Class event_class = PP_INPUTEVENT_CLASS_IME; 912 PP_InputEvent_Class event_class = PP_INPUTEVENT_CLASS_IME;
907 if (!(filtered_input_event_mask_ & event_class) && 913 if (!(filtered_input_event_mask_ & event_class) &&
908 !(input_event_mask_ & event_class)) 914 !(input_event_mask_ & event_class))
909 return false; 915 return false;
910 916
911 ppapi::InputEventData event; 917 ppapi::InputEventData event;
912 event.event_type = type; 918 event.event_type = type;
913 event.event_time_stamp = ppapi::TimeTicksToPPTimeTicks( 919 event.event_time_stamp =
914 base::TimeTicks::Now()); 920 ppapi::TimeTicksToPPTimeTicks(base::TimeTicks::Now());
915 921
916 // Convert UTF16 text to UTF8 with offset conversion. 922 // Convert UTF16 text to UTF8 with offset conversion.
917 std::vector<size_t> utf16_offsets; 923 std::vector<size_t> utf16_offsets;
918 utf16_offsets.push_back(selection_start); 924 utf16_offsets.push_back(selection_start);
919 utf16_offsets.push_back(selection_end); 925 utf16_offsets.push_back(selection_end);
920 for (size_t i = 0; i < underlines.size(); ++i) { 926 for (size_t i = 0; i < underlines.size(); ++i) {
921 utf16_offsets.push_back(underlines[i].startOffset); 927 utf16_offsets.push_back(underlines[i].startOffset);
922 utf16_offsets.push_back(underlines[i].endOffset); 928 utf16_offsets.push_back(underlines[i].endOffset);
923 } 929 }
924 std::vector<size_t> utf8_offsets(utf16_offsets); 930 std::vector<size_t> utf8_offsets(utf16_offsets);
925 event.character_text = base::UTF16ToUTF8AndAdjustOffsets(text, &utf8_offsets); 931 event.character_text = base::UTF16ToUTF8AndAdjustOffsets(text, &utf8_offsets);
926 932
927 // Set the converted selection range. 933 // Set the converted selection range.
928 event.composition_selection_start = (utf8_offsets[0] == std::string::npos ? 934 event.composition_selection_start =
929 event.character_text.size() : utf8_offsets[0]); 935 (utf8_offsets[0] == std::string::npos ? event.character_text.size()
930 event.composition_selection_end = (utf8_offsets[1] == std::string::npos ? 936 : utf8_offsets[0]);
931 event.character_text.size() : utf8_offsets[1]); 937 event.composition_selection_end =
938 (utf8_offsets[1] == std::string::npos ? event.character_text.size()
939 : utf8_offsets[1]);
932 940
933 // Set the converted segmentation points. 941 // Set the converted segmentation points.
934 // Be sure to add 0 and size(), and remove duplication or errors. 942 // Be sure to add 0 and size(), and remove duplication or errors.
935 std::set<size_t> offset_set(utf8_offsets.begin()+2, utf8_offsets.end()); 943 std::set<size_t> offset_set(utf8_offsets.begin() + 2, utf8_offsets.end());
936 offset_set.insert(0); 944 offset_set.insert(0);
937 offset_set.insert(event.character_text.size()); 945 offset_set.insert(event.character_text.size());
938 offset_set.erase(std::string::npos); 946 offset_set.erase(std::string::npos);
939 event.composition_segment_offsets.assign(offset_set.begin(), 947 event.composition_segment_offsets.assign(offset_set.begin(),
940 offset_set.end()); 948 offset_set.end());
941 949
942 // Set the composition target. 950 // Set the composition target.
943 for (size_t i = 0; i < underlines.size(); ++i) { 951 for (size_t i = 0; i < underlines.size(); ++i) {
944 if (underlines[i].thick) { 952 if (underlines[i].thick) {
945 std::vector<uint32_t>::iterator it = 953 std::vector<uint32_t>::iterator it =
946 std::find(event.composition_segment_offsets.begin(), 954 std::find(event.composition_segment_offsets.begin(),
947 event.composition_segment_offsets.end(), 955 event.composition_segment_offsets.end(),
948 utf8_offsets[2*i+2]); 956 utf8_offsets[2 * i + 2]);
949 if (it != event.composition_segment_offsets.end()) { 957 if (it != event.composition_segment_offsets.end()) {
950 event.composition_target_segment = 958 event.composition_target_segment =
951 it - event.composition_segment_offsets.begin(); 959 it - event.composition_segment_offsets.begin();
952 break; 960 break;
953 } 961 }
954 } 962 }
955 } 963 }
956 964
957 // Send the event. 965 // Send the event.
958 bool handled = false; 966 bool handled = false;
(...skipping 22 matching lines...) Expand all
981 text); 989 text);
982 } 990 }
983 991
984 bool PepperPluginInstanceImpl::HandleCompositionUpdate( 992 bool PepperPluginInstanceImpl::HandleCompositionUpdate(
985 const base::string16& text, 993 const base::string16& text,
986 const std::vector<blink::WebCompositionUnderline>& underlines, 994 const std::vector<blink::WebCompositionUnderline>& underlines,
987 int selection_start, 995 int selection_start,
988 int selection_end) { 996 int selection_end) {
989 return SendCompositionEventWithUnderlineInformationToPlugin( 997 return SendCompositionEventWithUnderlineInformationToPlugin(
990 PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE, 998 PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE,
991 text, underlines, selection_start, selection_end); 999 text,
1000 underlines,
1001 selection_start,
1002 selection_end);
992 } 1003 }
993 1004
994 bool PepperPluginInstanceImpl::HandleCompositionEnd( 1005 bool PepperPluginInstanceImpl::HandleCompositionEnd(
995 const base::string16& text) { 1006 const base::string16& text) {
996 return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_COMPOSITION_END, 1007 return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_COMPOSITION_END,
997 text); 1008 text);
998 } 1009 }
999 1010
1000 bool PepperPluginInstanceImpl::HandleTextInput(const base::string16& text) { 1011 bool PepperPluginInstanceImpl::HandleTextInput(const base::string16& text) {
1001 return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_TEXT, 1012 return SendCompositionEventToPlugin(PP_INPUTEVENT_TYPE_IME_TEXT, text);
1002 text);
1003 } 1013 }
1004 1014
1005 void PepperPluginInstanceImpl::GetSurroundingText(base::string16* text, 1015 void PepperPluginInstanceImpl::GetSurroundingText(base::string16* text,
1006 gfx::Range* range) const { 1016 gfx::Range* range) const {
1007 std::vector<size_t> offsets; 1017 std::vector<size_t> offsets;
1008 offsets.push_back(selection_anchor_); 1018 offsets.push_back(selection_anchor_);
1009 offsets.push_back(selection_caret_); 1019 offsets.push_back(selection_caret_);
1010 *text = base::UTF8ToUTF16AndAdjustOffsets(surrounding_text_, &offsets); 1020 *text = base::UTF8ToUTF16AndAdjustOffsets(surrounding_text_, &offsets);
1011 range->set_start(offsets[0] == base::string16::npos ? text->size() 1021 range->set_start(offsets[0] == base::string16::npos ? text->size()
1012 : offsets[0]); 1022 : offsets[0]);
1013 range->set_end(offsets[1] == base::string16::npos ? text->size() 1023 range->set_end(offsets[1] == base::string16::npos ? text->size()
1014 : offsets[1]); 1024 : offsets[1]);
1015 } 1025 }
1016 1026
1017 bool PepperPluginInstanceImpl::IsPluginAcceptingCompositionEvents() const { 1027 bool PepperPluginInstanceImpl::IsPluginAcceptingCompositionEvents() const {
1018 return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_IME) || 1028 return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_IME) ||
1019 (input_event_mask_ & PP_INPUTEVENT_CLASS_IME); 1029 (input_event_mask_ & PP_INPUTEVENT_CLASS_IME);
1020 } 1030 }
1021 1031
1022 gfx::Rect PepperPluginInstanceImpl::GetCaretBounds() const { 1032 gfx::Rect PepperPluginInstanceImpl::GetCaretBounds() const {
1023 if (!text_input_caret_set_) { 1033 if (!text_input_caret_set_) {
1024 // If it is never set by the plugin, use the bottom left corner. 1034 // If it is never set by the plugin, use the bottom left corner.
1025 return gfx::Rect(view_data_.rect.point.x, 1035 return gfx::Rect(view_data_.rect.point.x,
1026 view_data_.rect.point.y + view_data_.rect.size.height, 1036 view_data_.rect.point.y + view_data_.rect.size.height,
1027 0, 0); 1037 0,
1038 0);
1028 } 1039 }
1029 1040
1030 // TODO(kinaba) Take CSS transformation into accont. 1041 // TODO(kinaba) Take CSS transformation into accont.
1031 // TODO(kinaba) Take bounding_box into account. On some platforms, an 1042 // TODO(kinaba) Take bounding_box into account. On some platforms, an
1032 // "exclude rectangle" where candidate window must avoid the region can be 1043 // "exclude rectangle" where candidate window must avoid the region can be
1033 // passed to IME. Currently, we pass only the caret rectangle because 1044 // passed to IME. Currently, we pass only the caret rectangle because
1034 // it is the only information supported uniformly in Chromium. 1045 // it is the only information supported uniformly in Chromium.
1035 gfx::Rect caret(text_input_caret_); 1046 gfx::Rect caret(text_input_caret_);
1036 caret.Offset(view_data_.rect.point.x, view_data_.rect.point.y); 1047 caret.Offset(view_data_.rect.point.x, view_data_.rect.point.y);
1037 return caret; 1048 return caret;
(...skipping 23 matching lines...) Expand all
1061 1072
1062 bool rv = false; 1073 bool rv = false;
1063 if (LoadInputEventInterface()) { 1074 if (LoadInputEventInterface()) {
1064 PP_InputEvent_Class event_class = ClassifyInputEvent(event.type); 1075 PP_InputEvent_Class event_class = ClassifyInputEvent(event.type);
1065 if (!event_class) 1076 if (!event_class)
1066 return false; 1077 return false;
1067 1078
1068 if ((filtered_input_event_mask_ & event_class) || 1079 if ((filtered_input_event_mask_ & event_class) ||
1069 (input_event_mask_ & event_class)) { 1080 (input_event_mask_ & event_class)) {
1070 // Actually send the event. 1081 // Actually send the event.
1071 std::vector< ppapi::InputEventData > events; 1082 std::vector<ppapi::InputEventData> events;
1072 CreateInputEventData(event, &events); 1083 CreateInputEventData(event, &events);
1073 1084
1074 // Allow the user gesture to be pending after the plugin handles the 1085 // Allow the user gesture to be pending after the plugin handles the
1075 // event. This allows out-of-process plugins to respond to the user 1086 // event. This allows out-of-process plugins to respond to the user
1076 // gesture after processing has finished here. 1087 // gesture after processing has finished here.
1077 if (WebUserGestureIndicator::isProcessingUserGesture()) { 1088 if (WebUserGestureIndicator::isProcessingUserGesture()) {
1078 pending_user_gesture_ = 1089 pending_user_gesture_ =
1079 ppapi::EventTimeToPPTimeTicks(event.timeStampSeconds); 1090 ppapi::EventTimeToPPTimeTicks(event.timeStampSeconds);
1080 pending_user_gesture_token_ = 1091 pending_user_gesture_token_ =
1081 WebUserGestureIndicator::currentUserGestureToken(); 1092 WebUserGestureIndicator::currentUserGestureToken();
1082 pending_user_gesture_token_.setOutOfProcess(); 1093 pending_user_gesture_token_.setOutOfProcess();
1083 } 1094 }
1084 1095
1085 // Each input event may generate more than one PP_InputEvent. 1096 // Each input event may generate more than one PP_InputEvent.
1086 for (size_t i = 0; i < events.size(); i++) { 1097 for (size_t i = 0; i < events.size(); i++) {
1087 if (filtered_input_event_mask_ & event_class) 1098 if (filtered_input_event_mask_ & event_class)
1088 events[i].is_filtered = true; 1099 events[i].is_filtered = true;
1089 else 1100 else
1090 rv = true; // Unfiltered events are assumed to be handled. 1101 rv = true; // Unfiltered events are assumed to be handled.
1091 scoped_refptr<PPB_InputEvent_Shared> event_resource( 1102 scoped_refptr<PPB_InputEvent_Shared> event_resource(
1092 new PPB_InputEvent_Shared(ppapi::OBJECT_IS_IMPL, 1103 new PPB_InputEvent_Shared(
1093 pp_instance(), events[i])); 1104 ppapi::OBJECT_IS_IMPL, pp_instance(), events[i]));
1094 1105
1095 rv |= PP_ToBool(plugin_input_event_interface_->HandleInputEvent( 1106 rv |= PP_ToBool(plugin_input_event_interface_->HandleInputEvent(
1096 pp_instance(), event_resource->pp_resource())); 1107 pp_instance(), event_resource->pp_resource()));
1097 } 1108 }
1098 } 1109 }
1099 } 1110 }
1100 1111
1101 if (cursor_) 1112 if (cursor_)
1102 *cursor_info = *cursor_; 1113 *cursor_info = *cursor_;
1103 return rv; 1114 return rv;
(...skipping 29 matching lines...) Expand all
1133 // in the "everything is clipped" case. 1144 // in the "everything is clipped" case.
1134 gfx::Rect new_clip; 1145 gfx::Rect new_clip;
1135 if (!clip.IsEmpty()) 1146 if (!clip.IsEmpty())
1136 new_clip = clip; 1147 new_clip = clip;
1137 1148
1138 cut_outs_rects_ = cut_outs_rects; 1149 cut_outs_rects_ = cut_outs_rects;
1139 1150
1140 view_data_.rect = PP_FromGfxRect(position); 1151 view_data_.rect = PP_FromGfxRect(position);
1141 view_data_.clip_rect = PP_FromGfxRect(clip); 1152 view_data_.clip_rect = PP_FromGfxRect(clip);
1142 view_data_.device_scale = container_->deviceScaleFactor(); 1153 view_data_.device_scale = container_->deviceScaleFactor();
1143 view_data_.css_scale = container_->pageZoomFactor() * 1154 view_data_.css_scale =
1144 container_->pageScaleFactor(); 1155 container_->pageZoomFactor() * container_->pageScaleFactor();
1145 1156
1146 if (desired_fullscreen_state_ || view_data_.is_fullscreen) { 1157 if (desired_fullscreen_state_ || view_data_.is_fullscreen) {
1147 WebElement element = container_->element(); 1158 WebElement element = container_->element();
1148 WebDocument document = element.document(); 1159 WebDocument document = element.document();
1149 bool is_fullscreen_element = (element == document.fullScreenElement()); 1160 bool is_fullscreen_element = (element == document.fullScreenElement());
1150 if (!view_data_.is_fullscreen && desired_fullscreen_state_ && 1161 if (!view_data_.is_fullscreen && desired_fullscreen_state_ &&
1151 render_frame()->GetRenderWidget()->is_fullscreen() && 1162 render_frame()->GetRenderWidget()->is_fullscreen() &&
1152 is_fullscreen_element) { 1163 is_fullscreen_element) {
1153 // Entered fullscreen. Only possible via SetFullscreen(). 1164 // Entered fullscreen. Only possible via SetFullscreen().
1154 view_data_.is_fullscreen = true; 1165 view_data_.is_fullscreen = true;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 1274
1264 gfx::Rect clip_page = PP_ToGfxRect(view_data_.clip_rect); 1275 gfx::Rect clip_page = PP_ToGfxRect(view_data_.clip_rect);
1265 gfx::Rect plugin_paint_rect = 1276 gfx::Rect plugin_paint_rect =
1266 gfx::IntersectRects(plugin_backing_store_rect, clip_page); 1277 gfx::IntersectRects(plugin_backing_store_rect, clip_page);
1267 if (!plugin_paint_rect.Contains(relative_paint_bounds)) 1278 if (!plugin_paint_rect.Contains(relative_paint_bounds))
1268 return false; 1279 return false;
1269 1280
1270 // Don't do optimized painting if the area to paint intersects with the 1281 // Don't do optimized painting if the area to paint intersects with the
1271 // cut-out rects, otherwise we will paint over them. 1282 // cut-out rects, otherwise we will paint over them.
1272 for (std::vector<gfx::Rect>::const_iterator iter = cut_outs_rects_.begin(); 1283 for (std::vector<gfx::Rect>::const_iterator iter = cut_outs_rects_.begin();
1273 iter != cut_outs_rects_.end(); ++iter) { 1284 iter != cut_outs_rects_.end();
1285 ++iter) {
1274 if (relative_paint_bounds.Intersects(*iter)) 1286 if (relative_paint_bounds.Intersects(*iter))
1275 return false; 1287 return false;
1276 } 1288 }
1277 1289
1278 *dib = image_data->GetTransportDIB(); 1290 *dib = image_data->GetTransportDIB();
1279 plugin_backing_store_rect.Offset(plugin_offset); 1291 plugin_backing_store_rect.Offset(plugin_offset);
1280 *location = plugin_backing_store_rect; 1292 *location = plugin_backing_store_rect;
1281 clip_page.Offset(plugin_offset); 1293 clip_page.Offset(plugin_offset);
1282 *clip = clip_page; 1294 *clip = clip_page;
1283 // The plugin scale factor is inverted, e.g. for a device scale factor of 2x 1295 // The plugin scale factor is inverted, e.g. for a device scale factor of 2x
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 1372
1361 bool PepperPluginInstanceImpl::StartFind(const base::string16& search_text, 1373 bool PepperPluginInstanceImpl::StartFind(const base::string16& search_text,
1362 bool case_sensitive, 1374 bool case_sensitive,
1363 int identifier) { 1375 int identifier) {
1364 // Keep a reference on the stack. See NOTE above. 1376 // Keep a reference on the stack. See NOTE above.
1365 scoped_refptr<PepperPluginInstanceImpl> ref(this); 1377 scoped_refptr<PepperPluginInstanceImpl> ref(this);
1366 if (!LoadFindInterface()) 1378 if (!LoadFindInterface())
1367 return false; 1379 return false;
1368 find_identifier_ = identifier; 1380 find_identifier_ = identifier;
1369 return PP_ToBool( 1381 return PP_ToBool(
1370 plugin_find_interface_->StartFind( 1382 plugin_find_interface_->StartFind(pp_instance(),
1371 pp_instance(), 1383 base::UTF16ToUTF8(search_text).c_str(),
1372 base::UTF16ToUTF8(search_text).c_str(), 1384 PP_FromBool(case_sensitive)));
1373 PP_FromBool(case_sensitive)));
1374 } 1385 }
1375 1386
1376 void PepperPluginInstanceImpl::SelectFindResult(bool forward) { 1387 void PepperPluginInstanceImpl::SelectFindResult(bool forward) {
1377 // Keep a reference on the stack. See NOTE above. 1388 // Keep a reference on the stack. See NOTE above.
1378 scoped_refptr<PepperPluginInstanceImpl> ref(this); 1389 scoped_refptr<PepperPluginInstanceImpl> ref(this);
1379 if (LoadFindInterface()) 1390 if (LoadFindInterface())
1380 plugin_find_interface_->SelectFindResult(pp_instance(), 1391 plugin_find_interface_->SelectFindResult(pp_instance(),
1381 PP_FromBool(forward)); 1392 PP_FromBool(forward));
1382 } 1393 }
1383 1394
1384 void PepperPluginInstanceImpl::StopFind() { 1395 void PepperPluginInstanceImpl::StopFind() {
1385 // Keep a reference on the stack. See NOTE above. 1396 // Keep a reference on the stack. See NOTE above.
1386 scoped_refptr<PepperPluginInstanceImpl> ref(this); 1397 scoped_refptr<PepperPluginInstanceImpl> ref(this);
1387 if (!LoadFindInterface()) 1398 if (!LoadFindInterface())
1388 return; 1399 return;
1389 find_identifier_ = -1; 1400 find_identifier_ = -1;
1390 plugin_find_interface_->StopFind(pp_instance()); 1401 plugin_find_interface_->StopFind(pp_instance());
1391 } 1402 }
1392 1403
1393 bool PepperPluginInstanceImpl::LoadFindInterface() { 1404 bool PepperPluginInstanceImpl::LoadFindInterface() {
1394 if (!module_->permissions().HasPermission(ppapi::PERMISSION_PRIVATE)) 1405 if (!module_->permissions().HasPermission(ppapi::PERMISSION_PRIVATE))
1395 return false; 1406 return false;
1396 if (!plugin_find_interface_) { 1407 if (!plugin_find_interface_) {
1397 plugin_find_interface_ = 1408 plugin_find_interface_ = static_cast<const PPP_Find_Private*>(
1398 static_cast<const PPP_Find_Private*>(module_->GetPluginInterface( 1409 module_->GetPluginInterface(PPP_FIND_PRIVATE_INTERFACE));
1399 PPP_FIND_PRIVATE_INTERFACE));
1400 } 1410 }
1401 1411
1402 return !!plugin_find_interface_; 1412 return !!plugin_find_interface_;
1403 } 1413 }
1404 1414
1405 bool PepperPluginInstanceImpl::LoadInputEventInterface() { 1415 bool PepperPluginInstanceImpl::LoadInputEventInterface() {
1406 if (!checked_for_plugin_input_event_interface_) { 1416 if (!checked_for_plugin_input_event_interface_) {
1407 checked_for_plugin_input_event_interface_ = true; 1417 checked_for_plugin_input_event_interface_ = true;
1408 plugin_input_event_interface_ = 1418 plugin_input_event_interface_ = static_cast<const PPP_InputEvent*>(
1409 static_cast<const PPP_InputEvent*>(module_->GetPluginInterface( 1419 module_->GetPluginInterface(PPP_INPUT_EVENT_INTERFACE));
1410 PPP_INPUT_EVENT_INTERFACE));
1411 } 1420 }
1412 return !!plugin_input_event_interface_; 1421 return !!plugin_input_event_interface_;
1413 } 1422 }
1414 1423
1415 bool PepperPluginInstanceImpl::LoadMessagingInterface() { 1424 bool PepperPluginInstanceImpl::LoadMessagingInterface() {
1416 if (!checked_for_plugin_messaging_interface_) { 1425 if (!checked_for_plugin_messaging_interface_) {
1417 checked_for_plugin_messaging_interface_ = true; 1426 checked_for_plugin_messaging_interface_ = true;
1418 plugin_messaging_interface_ = 1427 plugin_messaging_interface_ = static_cast<const PPP_Messaging*>(
1419 static_cast<const PPP_Messaging*>(module_->GetPluginInterface( 1428 module_->GetPluginInterface(PPP_MESSAGING_INTERFACE));
1420 PPP_MESSAGING_INTERFACE));
1421 } 1429 }
1422 return !!plugin_messaging_interface_; 1430 return !!plugin_messaging_interface_;
1423 } 1431 }
1424 1432
1425 bool PepperPluginInstanceImpl::LoadMouseLockInterface() { 1433 bool PepperPluginInstanceImpl::LoadMouseLockInterface() {
1426 if (!plugin_mouse_lock_interface_) { 1434 if (!plugin_mouse_lock_interface_) {
1427 plugin_mouse_lock_interface_ = 1435 plugin_mouse_lock_interface_ = static_cast<const PPP_MouseLock*>(
1428 static_cast<const PPP_MouseLock*>(module_->GetPluginInterface( 1436 module_->GetPluginInterface(PPP_MOUSELOCK_INTERFACE));
1429 PPP_MOUSELOCK_INTERFACE));
1430 } 1437 }
1431 1438
1432 return !!plugin_mouse_lock_interface_; 1439 return !!plugin_mouse_lock_interface_;
1433 } 1440 }
1434 1441
1435 bool PepperPluginInstanceImpl::LoadPdfInterface() { 1442 bool PepperPluginInstanceImpl::LoadPdfInterface() {
1436 if (!checked_for_plugin_pdf_interface_) { 1443 if (!checked_for_plugin_pdf_interface_) {
1437 checked_for_plugin_pdf_interface_ = true; 1444 checked_for_plugin_pdf_interface_ = true;
1438 plugin_pdf_interface_ = 1445 plugin_pdf_interface_ = static_cast<const PPP_Pdf_1*>(
1439 static_cast<const PPP_Pdf_1*>(module_->GetPluginInterface( 1446 module_->GetPluginInterface(PPP_PDF_INTERFACE_1));
1440 PPP_PDF_INTERFACE_1));
1441 } 1447 }
1442 1448
1443 return !!plugin_pdf_interface_; 1449 return !!plugin_pdf_interface_;
1444 } 1450 }
1445 1451
1446 bool PepperPluginInstanceImpl::LoadPrintInterface() { 1452 bool PepperPluginInstanceImpl::LoadPrintInterface() {
1447 // Only check for the interface if the plugin has dev permission. 1453 // Only check for the interface if the plugin has dev permission.
1448 if (!module_->permissions().HasPermission(ppapi::PERMISSION_DEV)) 1454 if (!module_->permissions().HasPermission(ppapi::PERMISSION_DEV))
1449 return false; 1455 return false;
1450 if (!plugin_print_interface_) { 1456 if (!plugin_print_interface_) {
1451 plugin_print_interface_ = static_cast<const PPP_Printing_Dev*>( 1457 plugin_print_interface_ = static_cast<const PPP_Printing_Dev*>(
1452 module_->GetPluginInterface(PPP_PRINTING_DEV_INTERFACE)); 1458 module_->GetPluginInterface(PPP_PRINTING_DEV_INTERFACE));
1453 } 1459 }
1454 return !!plugin_print_interface_; 1460 return !!plugin_print_interface_;
1455 } 1461 }
1456 1462
1457 bool PepperPluginInstanceImpl::LoadPrivateInterface() { 1463 bool PepperPluginInstanceImpl::LoadPrivateInterface() {
1458 // If this is a NaCl app, we want to talk to the trusted NaCl plugin to 1464 // If this is a NaCl app, we want to talk to the trusted NaCl plugin to
1459 // call GetInstanceObject. This is necessary to ensure that the properties 1465 // call GetInstanceObject. This is necessary to ensure that the properties
1460 // the trusted plugin exposes (readyState and lastError) work properly. Note 1466 // the trusted plugin exposes (readyState and lastError) work properly. Note
1461 // that untrusted NaCl apps are not allowed to provide PPP_InstancePrivate, 1467 // that untrusted NaCl apps are not allowed to provide PPP_InstancePrivate,
1462 // so it's correct to never look up PPP_InstancePrivate for them. 1468 // so it's correct to never look up PPP_InstancePrivate for them.
1463 // 1469 //
1464 // If this is *not* a NaCl plugin, original_module_ will never be set; we talk 1470 // If this is *not* a NaCl plugin, original_module_ will never be set; we talk
1465 // to the "real" module. 1471 // to the "real" module.
1466 scoped_refptr<PluginModule> module = original_module_ ? original_module_ : 1472 scoped_refptr<PluginModule> module =
1467 module_; 1473 original_module_ ? original_module_ : module_;
1468 // Only check for the interface if the plugin has private permission. 1474 // Only check for the interface if the plugin has private permission.
1469 if (!module->permissions().HasPermission(ppapi::PERMISSION_PRIVATE)) 1475 if (!module->permissions().HasPermission(ppapi::PERMISSION_PRIVATE))
1470 return false; 1476 return false;
1471 if (!plugin_private_interface_) { 1477 if (!plugin_private_interface_) {
1472 plugin_private_interface_ = static_cast<const PPP_Instance_Private*>( 1478 plugin_private_interface_ = static_cast<const PPP_Instance_Private*>(
1473 module->GetPluginInterface(PPP_INSTANCE_PRIVATE_INTERFACE)); 1479 module->GetPluginInterface(PPP_INSTANCE_PRIVATE_INTERFACE));
1474 } 1480 }
1475 1481
1476 return !!plugin_private_interface_; 1482 return !!plugin_private_interface_;
1477 } 1483 }
1478 1484
1479 bool PepperPluginInstanceImpl::LoadSelectionInterface() { 1485 bool PepperPluginInstanceImpl::LoadSelectionInterface() {
1480 if (!plugin_selection_interface_) { 1486 if (!plugin_selection_interface_) {
1481 plugin_selection_interface_ = 1487 plugin_selection_interface_ = static_cast<const PPP_Selection_Dev*>(
1482 static_cast<const PPP_Selection_Dev*>(module_->GetPluginInterface( 1488 module_->GetPluginInterface(PPP_SELECTION_DEV_INTERFACE));
1483 PPP_SELECTION_DEV_INTERFACE));
1484 } 1489 }
1485 return !!plugin_selection_interface_; 1490 return !!plugin_selection_interface_;
1486 } 1491 }
1487 1492
1488 bool PepperPluginInstanceImpl::LoadTextInputInterface() { 1493 bool PepperPluginInstanceImpl::LoadTextInputInterface() {
1489 if (!plugin_textinput_interface_) { 1494 if (!plugin_textinput_interface_) {
1490 plugin_textinput_interface_ = 1495 plugin_textinput_interface_ = static_cast<const PPP_TextInput_Dev*>(
1491 static_cast<const PPP_TextInput_Dev*>(module_->GetPluginInterface( 1496 module_->GetPluginInterface(PPP_TEXTINPUT_DEV_INTERFACE));
1492 PPP_TEXTINPUT_DEV_INTERFACE));
1493 } 1497 }
1494 1498
1495 return !!plugin_textinput_interface_; 1499 return !!plugin_textinput_interface_;
1496 } 1500 }
1497 1501
1498 bool PepperPluginInstanceImpl::LoadZoomInterface() { 1502 bool PepperPluginInstanceImpl::LoadZoomInterface() {
1499 if (!plugin_zoom_interface_) { 1503 if (!plugin_zoom_interface_) {
1500 plugin_zoom_interface_ = 1504 plugin_zoom_interface_ = static_cast<const PPP_Zoom_Dev*>(
1501 static_cast<const PPP_Zoom_Dev*>(module_->GetPluginInterface( 1505 module_->GetPluginInterface(PPP_ZOOM_DEV_INTERFACE));
1502 PPP_ZOOM_DEV_INTERFACE));
1503 } 1506 }
1504 1507
1505 return !!plugin_zoom_interface_; 1508 return !!plugin_zoom_interface_;
1506 } 1509 }
1507 1510
1508 void PepperPluginInstanceImpl::UpdateLayerTransform() { 1511 void PepperPluginInstanceImpl::UpdateLayerTransform() {
1509 if (!bound_graphics_2d_platform_ || !texture_layer_) { 1512 if (!bound_graphics_2d_platform_ || !texture_layer_) {
1510 // Currently the transform is only applied for Graphics2D. 1513 // Currently the transform is only applied for Graphics2D.
1511 return; 1514 return;
1512 } 1515 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 1550
1548 // instance_interface_ may have been cleared in Delete() if the 1551 // instance_interface_ may have been cleared in Delete() if the
1549 // PepperWebPluginImpl is destroyed. 1552 // PepperWebPluginImpl is destroyed.
1550 if (instance_interface_) 1553 if (instance_interface_)
1551 instance_interface_->DidChangeFocus(pp_instance(), PP_FromBool(has_focus)); 1554 instance_interface_->DidChangeFocus(pp_instance(), PP_FromBool(has_focus));
1552 } 1555 }
1553 1556
1554 void PepperPluginInstanceImpl::UpdateTouchEventRequest() { 1557 void PepperPluginInstanceImpl::UpdateTouchEventRequest() {
1555 bool raw_touch = (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH) || 1558 bool raw_touch = (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH) ||
1556 (input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH); 1559 (input_event_mask_ & PP_INPUTEVENT_CLASS_TOUCH);
1557 container_->requestTouchEventType(raw_touch ? 1560 container_->requestTouchEventType(
1558 blink::WebPluginContainer::TouchEventRequestTypeRaw : 1561 raw_touch
1559 blink::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse); 1562 ? blink::WebPluginContainer::TouchEventRequestTypeRaw
1563 : blink::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse);
1560 } 1564 }
1561 1565
1562 bool PepperPluginInstanceImpl::IsAcceptingWheelEvents() const { 1566 bool PepperPluginInstanceImpl::IsAcceptingWheelEvents() const {
1563 return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL) || 1567 return (filtered_input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL) ||
1564 (input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL); 1568 (input_event_mask_ & PP_INPUTEVENT_CLASS_WHEEL);
1565 } 1569 }
1566 1570
1567 void PepperPluginInstanceImpl::ScheduleAsyncDidChangeView() { 1571 void PepperPluginInstanceImpl::ScheduleAsyncDidChangeView() {
1568 if (view_change_weak_ptr_factory_.HasWeakPtrs()) 1572 if (view_change_weak_ptr_factory_.HasWeakPtrs())
1569 return; // Already scheduled. 1573 return; // Already scheduled.
1570 base::MessageLoop::current()->PostTask( 1574 base::MessageLoop::current()->PostTask(
1571 FROM_HERE, 1575 FROM_HERE,
1572 base::Bind(&PepperPluginInstanceImpl::SendAsyncDidChangeView, 1576 base::Bind(&PepperPluginInstanceImpl::SendAsyncDidChangeView,
1573 view_change_weak_ptr_factory_.GetWeakPtr())); 1577 view_change_weak_ptr_factory_.GetWeakPtr()));
1574 } 1578 }
(...skipping 15 matching lines...) Expand all
1590 1594
1591 if (view_change_weak_ptr_factory_.HasWeakPtrs() || 1595 if (view_change_weak_ptr_factory_.HasWeakPtrs() ||
1592 (sent_initial_did_change_view_ && 1596 (sent_initial_did_change_view_ &&
1593 last_sent_view_data_.Equals(view_data_))) 1597 last_sent_view_data_.Equals(view_data_)))
1594 return; // Nothing to update. 1598 return; // Nothing to update.
1595 1599
1596 sent_initial_did_change_view_ = true; 1600 sent_initial_did_change_view_ = true;
1597 last_sent_view_data_ = view_data_; 1601 last_sent_view_data_ = view_data_;
1598 ScopedPPResource resource( 1602 ScopedPPResource resource(
1599 ScopedPPResource::PassRef(), 1603 ScopedPPResource::PassRef(),
1600 (new PPB_View_Shared(ppapi::OBJECT_IS_IMPL, 1604 (new PPB_View_Shared(ppapi::OBJECT_IS_IMPL, pp_instance(), view_data_))
1601 pp_instance(), view_data_))->GetReference()); 1605 ->GetReference());
1602 1606
1603 UpdateLayerTransform(); 1607 UpdateLayerTransform();
1604 1608
1605 // It's possible that Delete() has been called but the renderer hasn't 1609 // It's possible that Delete() has been called but the renderer hasn't
1606 // released its reference to this object yet. 1610 // released its reference to this object yet.
1607 if (instance_interface_) { 1611 if (instance_interface_) {
1608 instance_interface_->DidChangeView(pp_instance(), resource, 1612 instance_interface_->DidChangeView(
1609 &view_data_.rect, 1613 pp_instance(), resource, &view_data_.rect, &view_data_.clip_rect);
1610 &view_data_.clip_rect);
1611 } 1614 }
1612 } 1615 }
1613 1616
1614 void PepperPluginInstanceImpl::ReportGeometry() { 1617 void PepperPluginInstanceImpl::ReportGeometry() {
1615 // If this call was delayed, we may have transitioned back to fullscreen in 1618 // If this call was delayed, we may have transitioned back to fullscreen in
1616 // the mean time, so only report the geometry if we are actually in normal 1619 // the mean time, so only report the geometry if we are actually in normal
1617 // mode. 1620 // mode.
1618 if (container_ && !fullscreen_container_ && !flash_fullscreen_) 1621 if (container_ && !fullscreen_container_ && !flash_fullscreen_)
1619 container_->reportGeometry(); 1622 container_->reportGeometry();
1620 } 1623 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1657 return 0; 1660 return 0;
1658 } 1661 }
1659 int num_pages = 0; 1662 int num_pages = 0;
1660 PP_PrintSettings_Dev print_settings; 1663 PP_PrintSettings_Dev print_settings;
1661 print_settings.printable_area = PP_FromGfxRect(print_params.printableArea); 1664 print_settings.printable_area = PP_FromGfxRect(print_params.printableArea);
1662 print_settings.content_area = PP_FromGfxRect(print_params.printContentArea); 1665 print_settings.content_area = PP_FromGfxRect(print_params.printContentArea);
1663 print_settings.paper_size = PP_FromGfxSize(print_params.paperSize); 1666 print_settings.paper_size = PP_FromGfxSize(print_params.paperSize);
1664 print_settings.dpi = print_params.printerDPI; 1667 print_settings.dpi = print_params.printerDPI;
1665 print_settings.orientation = PP_PRINTORIENTATION_NORMAL; 1668 print_settings.orientation = PP_PRINTORIENTATION_NORMAL;
1666 print_settings.grayscale = PP_FALSE; 1669 print_settings.grayscale = PP_FALSE;
1667 print_settings.print_scaling_option = static_cast<PP_PrintScalingOption_Dev>( 1670 print_settings.print_scaling_option =
1668 print_params.printScalingOption); 1671 static_cast<PP_PrintScalingOption_Dev>(print_params.printScalingOption);
1669 print_settings.format = format; 1672 print_settings.format = format;
1670 num_pages = plugin_print_interface_->Begin(pp_instance(), 1673 num_pages = plugin_print_interface_->Begin(pp_instance(), &print_settings);
1671 &print_settings);
1672 if (!num_pages) 1674 if (!num_pages)
1673 return 0; 1675 return 0;
1674 current_print_settings_ = print_settings; 1676 current_print_settings_ = print_settings;
1675 canvas_.clear(); 1677 canvas_.clear();
1676 ranges_.clear(); 1678 ranges_.clear();
1677 return num_pages; 1679 return num_pages;
1678 } 1680 }
1679 1681
1680 bool PepperPluginInstanceImpl::PrintPage(int page_number, 1682 bool PepperPluginInstanceImpl::PrintPage(int page_number,
1681 blink::WebCanvas* canvas) { 1683 blink::WebCanvas* canvas) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 if (!LoadPdfInterface()) 1750 if (!LoadPdfInterface())
1749 return false; 1751 return false;
1750 1752
1751 return true; 1753 return true;
1752 } 1754 }
1753 1755
1754 void PepperPluginInstanceImpl::RotateView(WebPlugin::RotationType type) { 1756 void PepperPluginInstanceImpl::RotateView(WebPlugin::RotationType type) {
1755 if (!LoadPdfInterface()) 1757 if (!LoadPdfInterface())
1756 return; 1758 return;
1757 PP_PrivatePageTransformType transform_type = 1759 PP_PrivatePageTransformType transform_type =
1758 type == WebPlugin::RotationType90Clockwise ? 1760 type == WebPlugin::RotationType90Clockwise
1759 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW : 1761 ? PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW
1760 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW; 1762 : PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW;
1761 plugin_pdf_interface_->Transform(pp_instance(), transform_type); 1763 plugin_pdf_interface_->Transform(pp_instance(), transform_type);
1762 // NOTE: plugin instance may have been deleted. 1764 // NOTE: plugin instance may have been deleted.
1763 } 1765 }
1764 1766
1765 bool PepperPluginInstanceImpl::FlashIsFullscreenOrPending() { 1767 bool PepperPluginInstanceImpl::FlashIsFullscreenOrPending() {
1766 return fullscreen_container_ != NULL; 1768 return fullscreen_container_ != NULL;
1767 } 1769 }
1768 1770
1769 bool PepperPluginInstanceImpl::IsFullscreenOrPending() { 1771 bool PepperPluginInstanceImpl::IsFullscreenOrPending() {
1770 return desired_fullscreen_state_; 1772 return desired_fullscreen_state_;
1771 } 1773 }
1772 1774
1773 bool PepperPluginInstanceImpl::SetFullscreen(bool fullscreen) { 1775 bool PepperPluginInstanceImpl::SetFullscreen(bool fullscreen) {
1774 // Keep a reference on the stack. See NOTE above. 1776 // Keep a reference on the stack. See NOTE above.
1775 scoped_refptr<PepperPluginInstanceImpl> ref(this); 1777 scoped_refptr<PepperPluginInstanceImpl> ref(this);
1776 1778
1777 // Check whether we are trying to switch to the state we're already going 1779 // Check whether we are trying to switch to the state we're already going
1778 // to (i.e. if we're already switching to fullscreen but the fullscreen 1780 // to (i.e. if we're already switching to fullscreen but the fullscreen
1779 // container isn't ready yet, don't do anything more). 1781 // container isn't ready yet, don't do anything more).
1780 if (fullscreen == IsFullscreenOrPending()) 1782 if (fullscreen == IsFullscreenOrPending())
1781 return false; 1783 return false;
1782 1784
1783 if (!render_frame_) 1785 if (!render_frame_)
1784 return false; 1786 return false;
1785 if (fullscreen && 1787 if (fullscreen && !render_frame_->render_view()
1786 !render_frame_->render_view()->renderer_preferences(). 1788 ->renderer_preferences()
1787 plugin_fullscreen_allowed) 1789 .plugin_fullscreen_allowed)
1788 return false; 1790 return false;
1789 1791
1790 // Check whether we are trying to switch while the state is in transition. 1792 // Check whether we are trying to switch while the state is in transition.
1791 // The 2nd request gets dropped while messing up the internal state, so 1793 // The 2nd request gets dropped while messing up the internal state, so
1792 // disallow this. 1794 // disallow this.
1793 if (view_data_.is_fullscreen != desired_fullscreen_state_) 1795 if (view_data_.is_fullscreen != desired_fullscreen_state_)
1794 return false; 1796 return false;
1795 1797
1796 if (fullscreen && !IsProcessingUserGesture()) 1798 if (fullscreen && !IsProcessingUserGesture())
1797 return false; 1799 return false;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1871 BufferAutoMapper mapper(enter.object()); 1873 BufferAutoMapper mapper(enter.object());
1872 if (!mapper.data() || !mapper.size()) { 1874 if (!mapper.data() || !mapper.size()) {
1873 NOTREACHED(); 1875 NOTREACHED();
1874 return false; 1876 return false;
1875 } 1877 }
1876 #if defined(OS_WIN) 1878 #if defined(OS_WIN)
1877 // For Windows, we need the PDF DLL to render the output PDF to a DC. 1879 // For Windows, we need the PDF DLL to render the output PDF to a DC.
1878 HMODULE pdf_module = GetModuleHandle(L"pdf.dll"); 1880 HMODULE pdf_module = GetModuleHandle(L"pdf.dll");
1879 if (!pdf_module) 1881 if (!pdf_module)
1880 return false; 1882 return false;
1881 RenderPDFPageToDCProc render_proc = 1883 RenderPDFPageToDCProc render_proc = reinterpret_cast<RenderPDFPageToDCProc>(
1882 reinterpret_cast<RenderPDFPageToDCProc>( 1884 GetProcAddress(pdf_module, "RenderPDFPageToDC"));
1883 GetProcAddress(pdf_module, "RenderPDFPageToDC"));
1884 if (!render_proc) 1885 if (!render_proc)
1885 return false; 1886 return false;
1886 #endif // defined(OS_WIN) 1887 #endif // defined(OS_WIN)
1887 1888
1888 bool ret = false; 1889 bool ret = false;
1889 #if defined(OS_POSIX) && !defined(OS_ANDROID) 1890 #if defined(OS_POSIX) && !defined(OS_ANDROID)
1890 // On Linux we just set the final bits in the native metafile 1891 // On Linux we just set the final bits in the native metafile
1891 // (NativeMetafile and PreviewMetafile must have compatible formats, 1892 // (NativeMetafile and PreviewMetafile must have compatible formats,
1892 // i.e. both PDF for this to work). 1893 // i.e. both PDF for this to work).
1893 printing::Metafile* metafile = 1894 printing::Metafile* metafile =
1894 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas); 1895 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas);
1895 DCHECK(metafile != NULL); 1896 DCHECK(metafile != NULL);
1896 if (metafile) 1897 if (metafile)
1897 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1898 ret = metafile->InitFromData(mapper.data(), mapper.size());
1898 #elif defined(OS_WIN) 1899 #elif defined(OS_WIN)
1899 printing::Metafile* metafile = 1900 printing::Metafile* metafile =
1900 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas); 1901 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(*canvas);
1901 if (metafile) { 1902 if (metafile) {
1902 // We only have a metafile when doing print preview, so we just want to 1903 // We only have a metafile when doing print preview, so we just want to
1903 // pass the PDF off to preview. 1904 // pass the PDF off to preview.
1904 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1905 ret = metafile->InitFromData(mapper.data(), mapper.size());
1905 } else { 1906 } else {
1906 // On Windows, we now need to render the PDF to the DC that backs the 1907 // On Windows, we now need to render the PDF to the DC that backs the
1907 // supplied canvas. 1908 // supplied canvas.
1908 HDC dc = skia::BeginPlatformPaint(canvas); 1909 HDC dc = skia::BeginPlatformPaint(canvas);
1909 DrawEmptyRectangle(dc); 1910 DrawEmptyRectangle(dc);
1910 gfx::Size size_in_pixels; 1911 gfx::Size size_in_pixels;
1911 size_in_pixels.set_width(printing::ConvertUnit( 1912 size_in_pixels.set_width(
1912 current_print_settings_.printable_area.size.width, 1913 printing::ConvertUnit(current_print_settings_.printable_area.size.width,
1913 static_cast<int>(printing::kPointsPerInch), 1914 static_cast<int>(printing::kPointsPerInch),
1914 current_print_settings_.dpi)); 1915 current_print_settings_.dpi));
1915 size_in_pixels.set_height(printing::ConvertUnit( 1916 size_in_pixels.set_height(printing::ConvertUnit(
1916 current_print_settings_.printable_area.size.height, 1917 current_print_settings_.printable_area.size.height,
1917 static_cast<int>(printing::kPointsPerInch), 1918 static_cast<int>(printing::kPointsPerInch),
1918 current_print_settings_.dpi)); 1919 current_print_settings_.dpi));
1919 // We need to scale down DC to fit an entire page into DC available area. 1920 // We need to scale down DC to fit an entire page into DC available area.
1920 // First, we'll try to use default scaling based on the 72dpi that is 1921 // First, we'll try to use default scaling based on the 72dpi that is
1921 // used in webkit for printing. 1922 // used in webkit for printing.
1922 // If default scaling is not enough to fit the entire PDF without 1923 // If default scaling is not enough to fit the entire PDF without
1923 // Current metafile is based on screen DC and have current screen size. 1924 // Current metafile is based on screen DC and have current screen size.
1924 // Writing outside of those boundaries will result in the cut-off output. 1925 // Writing outside of those boundaries will result in the cut-off output.
1925 // On metafiles (this is the case here), scaling down will still record 1926 // On metafiles (this is the case here), scaling down will still record
1926 // original coordinates and we'll be able to print in full resolution. 1927 // original coordinates and we'll be able to print in full resolution.
1927 // Before playback we'll need to counter the scaling up that will happen 1928 // Before playback we'll need to counter the scaling up that will happen
1928 // in the browser (printed_document_win.cc). 1929 // in the browser (printed_document_win.cc).
1929 double dynamic_scale = gfx::CalculatePageScale(dc, size_in_pixels.width(), 1930 double dynamic_scale = gfx::CalculatePageScale(
1930 size_in_pixels.height()); 1931 dc, size_in_pixels.width(), size_in_pixels.height());
1931 double page_scale = static_cast<double>(printing::kPointsPerInch) / 1932 double page_scale = static_cast<double>(printing::kPointsPerInch) /
1932 static_cast<double>(current_print_settings_.dpi); 1933 static_cast<double>(current_print_settings_.dpi);
1933 1934
1934 if (dynamic_scale < page_scale) { 1935 if (dynamic_scale < page_scale) {
1935 page_scale = dynamic_scale; 1936 page_scale = dynamic_scale;
1936 printing::MetafileSkiaWrapper::SetCustomScaleOnCanvas(*canvas, 1937 printing::MetafileSkiaWrapper::SetCustomScaleOnCanvas(*canvas,
1937 page_scale); 1938 page_scale);
1938 } 1939 }
1939 1940
1940 gfx::ScaleDC(dc, page_scale); 1941 gfx::ScaleDC(dc, page_scale);
1941 1942
1942 ret = render_proc(static_cast<unsigned char*>(mapper.data()), mapper.size(), 1943 ret = render_proc(static_cast<unsigned char*>(mapper.data()),
1943 0, dc, current_print_settings_.dpi, 1944 mapper.size(),
1944 current_print_settings_.dpi, 0, 0, size_in_pixels.width(), 1945 0,
1945 size_in_pixels.height(), true, false, true, true, true); 1946 dc,
1947 current_print_settings_.dpi,
1948 current_print_settings_.dpi,
1949 0,
1950 0,
1951 size_in_pixels.width(),
1952 size_in_pixels.height(),
1953 true,
1954 false,
1955 true,
1956 true,
1957 true);
1946 skia::EndPlatformPaint(canvas); 1958 skia::EndPlatformPaint(canvas);
1947 } 1959 }
1948 #endif // defined(OS_WIN) 1960 #endif // defined(OS_WIN)
1949 1961
1950 return ret; 1962 return ret;
1951 #else // defined(ENABLE_FULL_PRINTING) 1963 #else // defined(ENABLE_FULL_PRINTING)
1952 return false; 1964 return false;
1953 #endif 1965 #endif
1954 } 1966 }
1955 1967
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2010 } else { 2022 } else {
2011 container_->setWebLayer(web_layer_.get()); 2023 container_->setWebLayer(web_layer_.get());
2012 texture_layer_->SetContentsOpaque(opaque); 2024 texture_layer_->SetContentsOpaque(opaque);
2013 } 2025 }
2014 } 2026 }
2015 layer_bound_to_fullscreen_ = !!fullscreen_container_; 2027 layer_bound_to_fullscreen_ = !!fullscreen_container_;
2016 layer_is_hardware_ = want_3d_layer; 2028 layer_is_hardware_ = want_3d_layer;
2017 UpdateLayerTransform(); 2029 UpdateLayerTransform();
2018 } 2030 }
2019 2031
2020 unsigned PepperPluginInstanceImpl::PrepareTexture() { 2032 unsigned PepperPluginInstanceImpl::PrepareTexture() { return 0; }
2021 return 0;
2022 }
2023 2033
2024 bool PepperPluginInstanceImpl::PrepareTextureMailbox( 2034 bool PepperPluginInstanceImpl::PrepareTextureMailbox(
2025 cc::TextureMailbox* mailbox, 2035 cc::TextureMailbox* mailbox,
2026 scoped_ptr<cc::SingleReleaseCallback>* release_callback, 2036 scoped_ptr<cc::SingleReleaseCallback>* release_callback,
2027 bool use_shared_memory) { 2037 bool use_shared_memory) {
2028 if (!bound_graphics_2d_platform_) 2038 if (!bound_graphics_2d_platform_)
2029 return false; 2039 return false;
2030 return bound_graphics_2d_platform_->PrepareTextureMailbox( 2040 return bound_graphics_2d_platform_->PrepareTextureMailbox(mailbox,
2031 mailbox, release_callback); 2041 release_callback);
2032 } 2042 }
2033 2043
2034 void PepperPluginInstanceImpl::OnDestruct() { 2044 void PepperPluginInstanceImpl::OnDestruct() { render_frame_ = NULL; }
2035 render_frame_ = NULL;
2036 }
2037 2045
2038 void PepperPluginInstanceImpl::AddPluginObject(PluginObject* plugin_object) { 2046 void PepperPluginInstanceImpl::AddPluginObject(PluginObject* plugin_object) {
2039 DCHECK(live_plugin_objects_.find(plugin_object) == 2047 DCHECK(live_plugin_objects_.find(plugin_object) ==
2040 live_plugin_objects_.end()); 2048 live_plugin_objects_.end());
2041 live_plugin_objects_.insert(plugin_object); 2049 live_plugin_objects_.insert(plugin_object);
2042 } 2050 }
2043 2051
2044 void PepperPluginInstanceImpl::RemovePluginObject(PluginObject* plugin_object) { 2052 void PepperPluginInstanceImpl::RemovePluginObject(PluginObject* plugin_object) {
2045 // Don't actually verify that the object is in the set since during module 2053 // Don't actually verify that the object is in the set since during module
2046 // deletion we'll be in the process of freeing them. 2054 // deletion we'll be in the process of freeing them.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2089 bool handled = SimulateIMEEvent(input_event); 2097 bool handled = SimulateIMEEvent(input_event);
2090 if (handled) 2098 if (handled)
2091 return; 2099 return;
2092 2100
2093 std::vector<linked_ptr<WebInputEvent> > events = 2101 std::vector<linked_ptr<WebInputEvent> > events =
2094 CreateSimulatedWebInputEvents( 2102 CreateSimulatedWebInputEvents(
2095 input_event, 2103 input_event,
2096 view_data_.rect.point.x + view_data_.rect.size.width / 2, 2104 view_data_.rect.point.x + view_data_.rect.size.width / 2,
2097 view_data_.rect.point.y + view_data_.rect.size.height / 2); 2105 view_data_.rect.point.y + view_data_.rect.size.height / 2);
2098 for (std::vector<linked_ptr<WebInputEvent> >::iterator it = events.begin(); 2106 for (std::vector<linked_ptr<WebInputEvent> >::iterator it = events.begin();
2099 it != events.end(); ++it) { 2107 it != events.end();
2108 ++it) {
2100 web_view->handleInputEvent(*it->get()); 2109 web_view->handleInputEvent(*it->get());
2101 } 2110 }
2102 } 2111 }
2103 2112
2104 bool PepperPluginInstanceImpl::SimulateIMEEvent( 2113 bool PepperPluginInstanceImpl::SimulateIMEEvent(
2105 const InputEventData& input_event) { 2114 const InputEventData& input_event) {
2106 switch (input_event.event_type) { 2115 switch (input_event.event_type) {
2107 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START: 2116 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START:
2108 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE: 2117 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE:
2109 SimulateImeSetCompositionEvent(input_event); 2118 SimulateImeSetCompositionEvent(input_event);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2147 if (input_event.composition_target_segment == static_cast<int32_t>(i - 2)) 2156 if (input_event.composition_target_segment == static_cast<int32_t>(i - 2))
2148 underline.thick = true; 2157 underline.thick = true;
2149 underlines.push_back(underline); 2158 underlines.push_back(underline);
2150 } 2159 }
2151 2160
2152 render_frame_->SimulateImeSetComposition( 2161 render_frame_->SimulateImeSetComposition(
2153 utf16_text, underlines, offsets[0], offsets[1]); 2162 utf16_text, underlines, offsets[0], offsets[1]);
2154 } 2163 }
2155 2164
2156 ContentDecryptorDelegate* 2165 ContentDecryptorDelegate*
2157 PepperPluginInstanceImpl::GetContentDecryptorDelegate() { 2166 PepperPluginInstanceImpl::GetContentDecryptorDelegate() {
2158 if (content_decryptor_delegate_) 2167 if (content_decryptor_delegate_)
2159 return content_decryptor_delegate_.get(); 2168 return content_decryptor_delegate_.get();
2160 2169
2161 const PPP_ContentDecryptor_Private* plugin_decryption_interface = 2170 const PPP_ContentDecryptor_Private* plugin_decryption_interface =
2162 static_cast<const PPP_ContentDecryptor_Private*>( 2171 static_cast<const PPP_ContentDecryptor_Private*>(
2163 module_->GetPluginInterface( 2172 module_->GetPluginInterface(PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE));
2164 PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE));
2165 if (!plugin_decryption_interface) 2173 if (!plugin_decryption_interface)
2166 return NULL; 2174 return NULL;
2167 2175
2168 content_decryptor_delegate_.reset( 2176 content_decryptor_delegate_.reset(
2169 new ContentDecryptorDelegate(pp_instance_, plugin_decryption_interface)); 2177 new ContentDecryptorDelegate(pp_instance_, plugin_decryption_interface));
2170 return content_decryptor_delegate_.get(); 2178 return content_decryptor_delegate_.get();
2171 } 2179 }
2172 2180
2173 PP_Bool PepperPluginInstanceImpl::BindGraphics(PP_Instance instance, 2181 PP_Bool PepperPluginInstanceImpl::BindGraphics(PP_Instance instance,
2174 PP_Resource device) { 2182 PP_Resource device) {
(...skipping 27 matching lines...) Expand all
2202 RendererPpapiHost::GetForPPInstance(instance)->GetPpapiHost(); 2210 RendererPpapiHost::GetForPPInstance(instance)->GetPpapiHost();
2203 ppapi::host::ResourceHost* host = ppapi_host->GetResourceHost(device); 2211 ppapi::host::ResourceHost* host = ppapi_host->GetResourceHost(device);
2204 PepperGraphics2DHost* graphics_2d = NULL; 2212 PepperGraphics2DHost* graphics_2d = NULL;
2205 if (host) { 2213 if (host) {
2206 if (host->IsGraphics2DHost()) 2214 if (host->IsGraphics2DHost())
2207 graphics_2d = static_cast<PepperGraphics2DHost*>(host); 2215 graphics_2d = static_cast<PepperGraphics2DHost*>(host);
2208 DLOG_IF(ERROR, !graphics_2d) << "Resource is not PepperGraphics2DHost."; 2216 DLOG_IF(ERROR, !graphics_2d) << "Resource is not PepperGraphics2DHost.";
2209 } 2217 }
2210 2218
2211 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false); 2219 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false);
2212 PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ? 2220 PPB_Graphics3D_Impl* graphics_3d =
2213 static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL; 2221 enter_3d.succeeded()
2222 ? static_cast<PPB_Graphics3D_Impl*>(enter_3d.object())
2223 : NULL;
2214 2224
2215 if (graphics_2d) { 2225 if (graphics_2d) {
2216 if (graphics_2d->BindToInstance(this)) { 2226 if (graphics_2d->BindToInstance(this)) {
2217 bound_graphics_2d_platform_ = graphics_2d; 2227 bound_graphics_2d_platform_ = graphics_2d;
2218 UpdateLayer(); 2228 UpdateLayer();
2219 return PP_TRUE; 2229 return PP_TRUE;
2220 } 2230 }
2221 } else if (graphics_3d) { 2231 } else if (graphics_3d) {
2222 // Make sure graphics can only be bound to the instance it is 2232 // Make sure graphics can only be bound to the instance it is
2223 // associated with. 2233 // associated with.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2287 WebFrame* frame = container_->element().document().frame(); 2297 WebFrame* frame = container_->element().document().frame();
2288 if (!frame) { 2298 if (!frame) {
2289 try_catch.SetException("No frame to execute script in."); 2299 try_catch.SetException("No frame to execute script in.");
2290 return PP_MakeUndefined(); 2300 return PP_MakeUndefined();
2291 } 2301 }
2292 2302
2293 NPVariant result; 2303 NPVariant result;
2294 bool ok = false; 2304 bool ok = false;
2295 if (IsProcessingUserGesture()) { 2305 if (IsProcessingUserGesture()) {
2296 blink::WebScopedUserGesture user_gesture(CurrentUserGestureToken()); 2306 blink::WebScopedUserGesture user_gesture(CurrentUserGestureToken());
2297 ok = WebBindings::evaluate(NULL, frame->windowObject(), &np_script, 2307 ok =
2298 &result); 2308 WebBindings::evaluate(NULL, frame->windowObject(), &np_script, &result);
2299 } else { 2309 } else {
2300 ok = WebBindings::evaluate(NULL, frame->windowObject(), &np_script, 2310 ok =
2301 &result); 2311 WebBindings::evaluate(NULL, frame->windowObject(), &np_script, &result);
2302 } 2312 }
2303 if (!ok) { 2313 if (!ok) {
2304 // TryCatch doesn't catch the exceptions properly. Since this is only for 2314 // TryCatch doesn't catch the exceptions properly. Since this is only for
2305 // a trusted API, just set to a general exception message. 2315 // a trusted API, just set to a general exception message.
2306 try_catch.SetException("Exception caught"); 2316 try_catch.SetException("Exception caught");
2307 WebBindings::releaseVariantValue(&result); 2317 WebBindings::releaseVariantValue(&result);
2308 return PP_MakeUndefined(); 2318 return PP_MakeUndefined();
2309 } 2319 }
2310 2320
2311 PP_Var ret = NPVariantToPPVar(this, &result); 2321 PP_Var ret = NPVariantToPPVar(this, &result);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2392 request_id); 2402 request_id);
2393 } 2403 }
2394 2404
2395 void PepperPluginInstanceImpl::DecoderResetDone( 2405 void PepperPluginInstanceImpl::DecoderResetDone(
2396 PP_Instance instance, 2406 PP_Instance instance,
2397 PP_DecryptorStreamType decoder_type, 2407 PP_DecryptorStreamType decoder_type,
2398 uint32_t request_id) { 2408 uint32_t request_id) {
2399 content_decryptor_delegate_->DecoderResetDone(decoder_type, request_id); 2409 content_decryptor_delegate_->DecoderResetDone(decoder_type, request_id);
2400 } 2410 }
2401 2411
2402
2403 void PepperPluginInstanceImpl::DeliverFrame( 2412 void PepperPluginInstanceImpl::DeliverFrame(
2404 PP_Instance instance, 2413 PP_Instance instance,
2405 PP_Resource decrypted_frame, 2414 PP_Resource decrypted_frame,
2406 const PP_DecryptedFrameInfo* frame_info) { 2415 const PP_DecryptedFrameInfo* frame_info) {
2407 content_decryptor_delegate_->DeliverFrame(decrypted_frame, frame_info); 2416 content_decryptor_delegate_->DeliverFrame(decrypted_frame, frame_info);
2408 } 2417 }
2409 2418
2410 void PepperPluginInstanceImpl::DeliverSamples( 2419 void PepperPluginInstanceImpl::DeliverSamples(
2411 PP_Instance instance, 2420 PP_Instance instance,
2412 PP_Resource audio_frames, 2421 PP_Resource audio_frames,
2413 const PP_DecryptedSampleInfo* sample_info) { 2422 const PP_DecryptedSampleInfo* sample_info) {
2414 content_decryptor_delegate_->DeliverSamples(audio_frames, sample_info); 2423 content_decryptor_delegate_->DeliverSamples(audio_frames, sample_info);
2415 } 2424 }
2416 2425
2417 void PepperPluginInstanceImpl::SetPluginToHandleFindRequests( 2426 void PepperPluginInstanceImpl::SetPluginToHandleFindRequests(
2418 PP_Instance instance) { 2427 PP_Instance instance) {
2419 if (!LoadFindInterface()) 2428 if (!LoadFindInterface())
2420 return; 2429 return;
2421 bool is_main_frame = render_frame_ && 2430 bool is_main_frame =
2431 render_frame_ &&
2422 render_frame_->GetRenderView()->GetMainRenderFrame() == render_frame_; 2432 render_frame_->GetRenderView()->GetMainRenderFrame() == render_frame_;
2423 if (!is_main_frame) 2433 if (!is_main_frame)
2424 return; 2434 return;
2425 render_frame_->render_view()->set_plugin_find_handler(this); 2435 render_frame_->render_view()->set_plugin_find_handler(this);
2426 } 2436 }
2427 2437
2428 void PepperPluginInstanceImpl::NumberOfFindResultsChanged( 2438 void PepperPluginInstanceImpl::NumberOfFindResultsChanged(
2429 PP_Instance instance, 2439 PP_Instance instance,
2430 int32_t total, 2440 int32_t total,
2431 PP_Bool final_result) { 2441 PP_Bool final_result) {
(...skipping 18 matching lines...) Expand all
2450 uint32_t count) { 2460 uint32_t count) {
2451 if (!render_frame_ || !render_frame_->GetWebFrame()) 2461 if (!render_frame_ || !render_frame_->GetWebFrame())
2452 return; 2462 return;
2453 2463
2454 blink::WebVector<blink::WebRect> tickmarks_converted( 2464 blink::WebVector<blink::WebRect> tickmarks_converted(
2455 static_cast<size_t>(count)); 2465 static_cast<size_t>(count));
2456 for (uint32 i = 0; i < count; ++i) { 2466 for (uint32 i = 0; i < count; ++i) {
2457 tickmarks_converted[i] = blink::WebRect(tickmarks[i].point.x, 2467 tickmarks_converted[i] = blink::WebRect(tickmarks[i].point.x,
2458 tickmarks[i].point.y, 2468 tickmarks[i].point.y,
2459 tickmarks[i].size.width, 2469 tickmarks[i].size.width,
2460 tickmarks[i].size.height);; 2470 tickmarks[i].size.height);
2471 ;
2461 } 2472 }
2462 blink::WebFrame* frame = render_frame_->GetWebFrame(); 2473 blink::WebFrame* frame = render_frame_->GetWebFrame();
2463 frame->setTickmarks(tickmarks_converted); 2474 frame->setTickmarks(tickmarks_converted);
2464 } 2475 }
2465 2476
2466 PP_Bool PepperPluginInstanceImpl::IsFullscreen(PP_Instance instance) { 2477 PP_Bool PepperPluginInstanceImpl::IsFullscreen(PP_Instance instance) {
2467 return PP_FromBool(view_data_.is_fullscreen); 2478 return PP_FromBool(view_data_.is_fullscreen);
2468 } 2479 }
2469 2480
2470 PP_Bool PepperPluginInstanceImpl::SetFullscreen(PP_Instance instance, 2481 PP_Bool PepperPluginInstanceImpl::SetFullscreen(PP_Instance instance,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2554 double minimum_factor, 2565 double minimum_factor,
2555 double maximum_factor) { 2566 double maximum_factor) {
2556 if (!render_frame_) 2567 if (!render_frame_)
2557 return; 2568 return;
2558 if (minimum_factor > maximum_factor) { 2569 if (minimum_factor > maximum_factor) {
2559 NOTREACHED(); 2570 NOTREACHED();
2560 return; 2571 return;
2561 } 2572 }
2562 double minimum_level = ZoomFactorToZoomLevel(minimum_factor); 2573 double minimum_level = ZoomFactorToZoomLevel(minimum_factor);
2563 double maximum_level = ZoomFactorToZoomLevel(maximum_factor); 2574 double maximum_level = ZoomFactorToZoomLevel(maximum_factor);
2564 render_frame_->render_view()->webview()->zoomLimitsChanged( 2575 render_frame_->render_view()->webview()->zoomLimitsChanged(minimum_level,
2565 minimum_level, maximum_level); 2576 maximum_level);
2566 } 2577 }
2567 2578
2568 void PepperPluginInstanceImpl::PostMessage(PP_Instance instance, 2579 void PepperPluginInstanceImpl::PostMessage(PP_Instance instance,
2569 PP_Var message) { 2580 PP_Var message) {
2570 message_channel_->PostMessageToJavaScript(message); 2581 message_channel_->PostMessageToJavaScript(message);
2571 } 2582 }
2572 2583
2573 PP_Bool PepperPluginInstanceImpl::SetCursor(PP_Instance instance, 2584 PP_Bool PepperPluginInstanceImpl::SetCursor(PP_Instance instance,
2574 PP_MouseCursor_Type type, 2585 PP_MouseCursor_Type type,
2575 PP_Resource image, 2586 PP_Resource image,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2702 PP_Instance instance, 2713 PP_Instance instance,
2703 PP_Var relative, 2714 PP_Var relative,
2704 PP_URLComponents_Dev* components) { 2715 PP_URLComponents_Dev* components) {
2705 StringVar* relative_string = StringVar::FromPPVar(relative); 2716 StringVar* relative_string = StringVar::FromPPVar(relative);
2706 if (!relative_string) 2717 if (!relative_string)
2707 return PP_MakeNull(); 2718 return PP_MakeNull();
2708 2719
2709 WebElement plugin_element = container()->element(); 2720 WebElement plugin_element = container()->element();
2710 GURL document_url = plugin_element.document().baseURL(); 2721 GURL document_url = plugin_element.document().baseURL();
2711 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn( 2722 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(
2712 document_url.Resolve(relative_string->value()), 2723 document_url.Resolve(relative_string->value()), components);
2713 components);
2714 } 2724 }
2715 2725
2716 PP_Bool PepperPluginInstanceImpl::DocumentCanRequest(PP_Instance instance, 2726 PP_Bool PepperPluginInstanceImpl::DocumentCanRequest(PP_Instance instance,
2717 PP_Var url) { 2727 PP_Var url) {
2718 StringVar* url_string = StringVar::FromPPVar(url); 2728 StringVar* url_string = StringVar::FromPPVar(url);
2719 if (!url_string) 2729 if (!url_string)
2720 return PP_FALSE; 2730 return PP_FALSE;
2721 2731
2722 blink::WebSecurityOrigin security_origin; 2732 blink::WebSecurityOrigin security_origin;
2723 if (!SecurityOriginForInstance(instance, &security_origin)) 2733 if (!SecurityOriginForInstance(instance, &security_origin))
(...skipping 24 matching lines...) Expand all
2748 PP_Instance instance, 2758 PP_Instance instance,
2749 PP_URLComponents_Dev* components) { 2759 PP_URLComponents_Dev* components) {
2750 blink::WebDocument document = container()->element().document(); 2760 blink::WebDocument document = container()->element().document();
2751 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(), 2761 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(),
2752 components); 2762 components);
2753 } 2763 }
2754 2764
2755 PP_Var PepperPluginInstanceImpl::GetPluginInstanceURL( 2765 PP_Var PepperPluginInstanceImpl::GetPluginInstanceURL(
2756 PP_Instance instance, 2766 PP_Instance instance,
2757 PP_URLComponents_Dev* components) { 2767 PP_URLComponents_Dev* components) {
2758 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(plugin_url_, 2768 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(plugin_url_, components);
2759 components);
2760 } 2769 }
2761 2770
2762 PP_Var PepperPluginInstanceImpl::GetPluginReferrerURL( 2771 PP_Var PepperPluginInstanceImpl::GetPluginReferrerURL(
2763 PP_Instance instance, 2772 PP_Instance instance,
2764 PP_URLComponents_Dev* components) { 2773 PP_URLComponents_Dev* components) {
2765 blink::WebDocument document = container()->element().document(); 2774 blink::WebDocument document = container()->element().document();
2766 if (!full_frame_) 2775 if (!full_frame_)
2767 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(), 2776 return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(),
2768 components); 2777 components);
2769 WebFrame* frame = document.frame(); 2778 WebFrame* frame = document.frame();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2812 checked_for_plugin_messaging_interface_ = false; 2821 checked_for_plugin_messaging_interface_ = false;
2813 plugin_mouse_lock_interface_ = NULL; 2822 plugin_mouse_lock_interface_ = NULL;
2814 plugin_pdf_interface_ = NULL; 2823 plugin_pdf_interface_ = NULL;
2815 checked_for_plugin_pdf_interface_ = false; 2824 checked_for_plugin_pdf_interface_ = false;
2816 plugin_private_interface_ = NULL; 2825 plugin_private_interface_ = NULL;
2817 plugin_selection_interface_ = NULL; 2826 plugin_selection_interface_ = NULL;
2818 plugin_textinput_interface_ = NULL; 2827 plugin_textinput_interface_ = NULL;
2819 plugin_zoom_interface_ = NULL; 2828 plugin_zoom_interface_ = NULL;
2820 2829
2821 // Re-send the DidCreate event via the proxy. 2830 // Re-send the DidCreate event via the proxy.
2822 scoped_ptr<const char*[]> argn_array(StringVectorToArgArray(argn_)); 2831 scoped_ptr<const char * []> argn_array(StringVectorToArgArray(argn_));
2823 scoped_ptr<const char*[]> argv_array(StringVectorToArgArray(argv_)); 2832 scoped_ptr<const char * []> argv_array(StringVectorToArgArray(argv_));
bbudge 2014/04/07 17:02:17 This is kind of weird.
2824 if (!instance_interface_->DidCreate(pp_instance(), argn_.size(), 2833 if (!instance_interface_->DidCreate(
2825 argn_array.get(), argv_array.get())) 2834 pp_instance(), argn_.size(), argn_array.get(), argv_array.get()))
2826 return PP_EXTERNAL_PLUGIN_ERROR_INSTANCE; 2835 return PP_EXTERNAL_PLUGIN_ERROR_INSTANCE;
2827 message_channel_->StopQueueingJavaScriptMessages(); 2836 message_channel_->StopQueueingJavaScriptMessages();
2828 2837
2829 // Clear sent_initial_did_change_view_ and cancel any pending DidChangeView 2838 // Clear sent_initial_did_change_view_ and cancel any pending DidChangeView
2830 // event. This way, SendDidChangeView will send the "current" view 2839 // event. This way, SendDidChangeView will send the "current" view
2831 // immediately (before other events like HandleDocumentLoad). 2840 // immediately (before other events like HandleDocumentLoad).
2832 sent_initial_did_change_view_ = false; 2841 sent_initial_did_change_view_ = false;
2833 view_change_weak_ptr_factory_.InvalidateWeakPtrs(); 2842 view_change_weak_ptr_factory_.InvalidateWeakPtrs();
2834 SendDidChangeView(); 2843 SendDidChangeView();
2835 2844
2836 DCHECK(external_document_load_); 2845 DCHECK(external_document_load_);
2837 external_document_load_ = false; 2846 external_document_load_ = false;
2838 if (!external_document_response_.isNull()) { 2847 if (!external_document_response_.isNull()) {
2839 document_loader_ = NULL; 2848 document_loader_ = NULL;
2840 // Pass the response to the new proxy. 2849 // Pass the response to the new proxy.
2841 HandleDocumentLoad(external_document_response_); 2850 HandleDocumentLoad(external_document_response_);
2842 external_document_response_ = blink::WebURLResponse(); 2851 external_document_response_ = blink::WebURLResponse();
2843 // Replay any document load events we've received to the real loader. 2852 // Replay any document load events we've received to the real loader.
2844 external_document_loader_->ReplayReceivedData(document_loader_); 2853 external_document_loader_->ReplayReceivedData(document_loader_);
2845 external_document_loader_.reset(NULL); 2854 external_document_loader_.reset(NULL);
2846 } 2855 }
2847 2856
2848 return PP_EXTERNAL_PLUGIN_OK; 2857 return PP_EXTERNAL_PLUGIN_OK;
2849 } 2858 }
2850 2859
2851 bool PepperPluginInstanceImpl::IsValidInstanceOf(PluginModule* module) { 2860 bool PepperPluginInstanceImpl::IsValidInstanceOf(PluginModule* module) {
2852 DCHECK(module); 2861 DCHECK(module);
2853 return module == module_.get() || 2862 return module == module_.get() || module == original_module_.get();
2854 module == original_module_.get();
2855 } 2863 }
2856 2864
2857 NPP PepperPluginInstanceImpl::instanceNPP() { 2865 NPP PepperPluginInstanceImpl::instanceNPP() { return npp_.get(); }
2858 return npp_.get();
2859 }
2860 2866
2861 PepperPluginInstance* PepperPluginInstance::Get(PP_Instance instance_id) { 2867 PepperPluginInstance* PepperPluginInstance::Get(PP_Instance instance_id) {
2862 return HostGlobals::Get()->GetInstance(instance_id); 2868 return HostGlobals::Get()->GetInstance(instance_id);
2863 } 2869 }
2864 2870
2865 RenderView* PepperPluginInstanceImpl::GetRenderView() { 2871 RenderView* PepperPluginInstanceImpl::GetRenderView() {
2866 return render_frame_ ? render_frame_->render_view() : NULL; 2872 return render_frame_ ? render_frame_->render_view() : NULL;
2867 } 2873 }
2868 2874
2869 blink::WebPluginContainer* PepperPluginInstanceImpl::GetContainer() { 2875 blink::WebPluginContainer* PepperPluginInstanceImpl::GetContainer() {
2870 return container_; 2876 return container_;
2871 } 2877 }
2872 2878
2873 v8::Isolate* PepperPluginInstanceImpl::GetIsolate() const { 2879 v8::Isolate* PepperPluginInstanceImpl::GetIsolate() const { return isolate_; }
2874 return isolate_;
2875 }
2876 2880
2877 ppapi::VarTracker* PepperPluginInstanceImpl::GetVarTracker() { 2881 ppapi::VarTracker* PepperPluginInstanceImpl::GetVarTracker() {
2878 return HostGlobals::Get()->GetVarTracker(); 2882 return HostGlobals::Get()->GetVarTracker();
2879 } 2883 }
2880 2884
2881 const GURL& PepperPluginInstanceImpl::GetPluginURL() { 2885 const GURL& PepperPluginInstanceImpl::GetPluginURL() { return plugin_url_; }
2882 return plugin_url_;
2883 }
2884 2886
2885 base::FilePath PepperPluginInstanceImpl::GetModulePath() { 2887 base::FilePath PepperPluginInstanceImpl::GetModulePath() {
2886 return module_->path(); 2888 return module_->path();
2887 } 2889 }
2888 2890
2889 PP_Resource PepperPluginInstanceImpl::CreateImage(gfx::ImageSkia* source_image, 2891 PP_Resource PepperPluginInstanceImpl::CreateImage(gfx::ImageSkia* source_image,
2890 float scale) { 2892 float scale) {
2891 gfx::ImageSkiaRep image_skia_rep = source_image->GetRepresentation(scale); 2893 gfx::ImageSkiaRep image_skia_rep = source_image->GetRepresentation(scale);
2892 2894
2893 if (image_skia_rep.is_null() || image_skia_rep.scale() != scale) 2895 if (image_skia_rep.is_null() || image_skia_rep.scale() != scale)
2894 return 0; 2896 return 0;
2895 2897
2896 scoped_refptr<PPB_ImageData_Impl> image_data(new PPB_ImageData_Impl( 2898 scoped_refptr<PPB_ImageData_Impl> image_data(
2897 pp_instance(), 2899 new PPB_ImageData_Impl(pp_instance(), PPB_ImageData_Impl::PLATFORM));
2898 PPB_ImageData_Impl::PLATFORM)); 2900 if (!image_data->Init(PPB_ImageData_Impl::GetNativeImageDataFormat(),
2899 if (!image_data->Init( 2901 image_skia_rep.pixel_width(),
2900 PPB_ImageData_Impl::GetNativeImageDataFormat(), 2902 image_skia_rep.pixel_height(),
2901 image_skia_rep.pixel_width(), 2903 false)) {
2902 image_skia_rep.pixel_height(),
2903 false)) {
2904 return 0; 2904 return 0;
2905 } 2905 }
2906 2906
2907 ImageDataAutoMapper mapper(image_data.get()); 2907 ImageDataAutoMapper mapper(image_data.get());
2908 if (!mapper.is_valid()) 2908 if (!mapper.is_valid())
2909 return 0; 2909 return 0;
2910 2910
2911 skia::PlatformCanvas* canvas = image_data->GetPlatformCanvas(); 2911 skia::PlatformCanvas* canvas = image_data->GetPlatformCanvas();
2912 // Note: Do not SkBitmap::copyTo the canvas bitmap directly because it will 2912 // Note: Do not SkBitmap::copyTo the canvas bitmap directly because it will
2913 // ignore the allocated pixels in shared memory and re-allocate a new buffer. 2913 // ignore the allocated pixels in shared memory and re-allocate a new buffer.
2914 canvas->writePixels(image_skia_rep.sk_bitmap(), 0, 0); 2914 canvas->writePixels(image_skia_rep.sk_bitmap(), 0, 0);
2915 2915
2916 return image_data->GetReference(); 2916 return image_data->GetReference();
2917 } 2917 }
2918 2918
2919 PP_ExternalPluginResult PepperPluginInstanceImpl::SwitchToOutOfProcessProxy( 2919 PP_ExternalPluginResult PepperPluginInstanceImpl::SwitchToOutOfProcessProxy(
2920 const base::FilePath& file_path, 2920 const base::FilePath& file_path,
2921 ppapi::PpapiPermissions permissions, 2921 ppapi::PpapiPermissions permissions,
2922 const IPC::ChannelHandle& channel_handle, 2922 const IPC::ChannelHandle& channel_handle,
2923 base::ProcessId plugin_pid, 2923 base::ProcessId plugin_pid,
2924 int plugin_child_id) { 2924 int plugin_child_id) {
2925 // Create a new module for each instance of the external plugin that is using 2925 // Create a new module for each instance of the external plugin that is using
2926 // the IPC based out-of-process proxy. We can't use the existing module, 2926 // the IPC based out-of-process proxy. We can't use the existing module,
2927 // because it is configured for the in-process plugin, and we must keep it 2927 // because it is configured for the in-process plugin, and we must keep it
2928 // that way to allow the page to create other instances. 2928 // that way to allow the page to create other instances.
2929 scoped_refptr<PluginModule> external_plugin_module( 2929 scoped_refptr<PluginModule> external_plugin_module(
2930 module_->CreateModuleForExternalPluginInstance()); 2930 module_->CreateModuleForExternalPluginInstance());
2931 2931
2932 RendererPpapiHostImpl* renderer_ppapi_host = 2932 RendererPpapiHostImpl* renderer_ppapi_host =
2933 external_plugin_module->CreateOutOfProcessModule( 2933 external_plugin_module->CreateOutOfProcessModule(render_frame_,
2934 render_frame_, 2934 file_path,
2935 file_path, 2935 permissions,
2936 permissions, 2936 channel_handle,
2937 channel_handle, 2937 plugin_pid,
2938 plugin_pid, 2938 plugin_child_id,
2939 plugin_child_id, 2939 true);
2940 true);
2941 if (!renderer_ppapi_host) { 2940 if (!renderer_ppapi_host) {
2942 DLOG(ERROR) << "CreateExternalPluginModule() failed"; 2941 DLOG(ERROR) << "CreateExternalPluginModule() failed";
2943 return PP_EXTERNAL_PLUGIN_ERROR_MODULE; 2942 return PP_EXTERNAL_PLUGIN_ERROR_MODULE;
2944 } 2943 }
2945 2944
2946 // Finally, switch the instance to the proxy. 2945 // Finally, switch the instance to the proxy.
2947 return external_plugin_module->InitAsProxiedExternalPlugin(this); 2946 return external_plugin_module->InitAsProxiedExternalPlugin(this);
2948 } 2947 }
2949 2948
2950 void PepperPluginInstanceImpl::SetAlwaysOnTop(bool on_top) { 2949 void PepperPluginInstanceImpl::SetAlwaysOnTop(bool on_top) {
(...skipping 21 matching lines...) Expand all
2972 scoped_refptr<PepperPluginInstanceImpl> ref(this); 2971 scoped_refptr<PepperPluginInstanceImpl> ref(this);
2973 2972
2974 // We check whether we are trying to switch to the state we're already going 2973 // We check whether we are trying to switch to the state we're already going
2975 // to (i.e. if we're already switching to fullscreen but the fullscreen 2974 // to (i.e. if we're already switching to fullscreen but the fullscreen
2976 // container isn't ready yet, don't do anything more). 2975 // container isn't ready yet, don't do anything more).
2977 if (fullscreen == FlashIsFullscreenOrPending()) 2976 if (fullscreen == FlashIsFullscreenOrPending())
2978 return true; 2977 return true;
2979 2978
2980 if (!render_frame_) 2979 if (!render_frame_)
2981 return false; 2980 return false;
2982 if (fullscreen && 2981 if (fullscreen && !render_frame_->render_view()
2983 !render_frame_->render_view()->renderer_preferences(). 2982 ->renderer_preferences()
2984 plugin_fullscreen_allowed) 2983 .plugin_fullscreen_allowed)
2985 return false; 2984 return false;
2986 2985
2987 // Unbind current 2D or 3D graphics context. 2986 // Unbind current 2D or 3D graphics context.
2988 VLOG(1) << "Setting fullscreen to " << (fullscreen ? "on" : "off"); 2987 VLOG(1) << "Setting fullscreen to " << (fullscreen ? "on" : "off");
2989 if (fullscreen) { 2988 if (fullscreen) {
2990 DCHECK(!fullscreen_container_); 2989 DCHECK(!fullscreen_container_);
2991 fullscreen_container_ = 2990 fullscreen_container_ =
2992 render_frame_->CreatePepperFullscreenContainer(this); 2991 render_frame_->CreatePepperFullscreenContainer(this);
2993 UpdateLayer(); 2992 UpdateLayer();
2994 } else { 2993 } else {
(...skipping 28 matching lines...) Expand all
3023 return PP_ERROR_FAILED; 3022 return PP_ERROR_FAILED;
3024 3023
3025 WebDocument document = container_->element().document(); 3024 WebDocument document = container_->element().document();
3026 WebFrame* frame = document.frame(); 3025 WebFrame* frame = document.frame();
3027 if (!frame) 3026 if (!frame)
3028 return PP_ERROR_FAILED; 3027 return PP_ERROR_FAILED;
3029 3028
3030 ppapi::URLRequestInfoData completed_request = request; 3029 ppapi::URLRequestInfoData completed_request = request;
3031 3030
3032 WebURLRequest web_request; 3031 WebURLRequest web_request;
3033 if (!CreateWebURLRequest(pp_instance_, 3032 if (!CreateWebURLRequest(
3034 &completed_request, 3033 pp_instance_, &completed_request, frame, &web_request)) {
3035 frame,
3036 &web_request)) {
3037 return PP_ERROR_FAILED; 3034 return PP_ERROR_FAILED;
3038 } 3035 }
3039 web_request.setFirstPartyForCookies(document.firstPartyForCookies()); 3036 web_request.setFirstPartyForCookies(document.firstPartyForCookies());
3040 web_request.setHasUserGesture(from_user_action); 3037 web_request.setHasUserGesture(from_user_action);
3041 3038
3042 GURL gurl(web_request.url()); 3039 GURL gurl(web_request.url());
3043 if (gurl.SchemeIs("javascript")) { 3040 if (gurl.SchemeIs("javascript")) {
3044 // In imitation of the NPAPI implementation, only |target_frame == frame| is 3041 // In imitation of the NPAPI implementation, only |target_frame == frame| is
3045 // allowed for security reasons. 3042 // allowed for security reasons.
3046 WebFrame* target_frame = 3043 WebFrame* target_frame =
3047 frame->view()->findFrameByName(WebString::fromUTF8(target), frame); 3044 frame->view()->findFrameByName(WebString::fromUTF8(target), frame);
3048 if (target_frame != frame) 3045 if (target_frame != frame)
3049 return PP_ERROR_NOACCESS; 3046 return PP_ERROR_NOACCESS;
3050 3047
3051 // TODO(viettrungluu): NPAPI sends the result back to the plugin -- do we 3048 // TODO(viettrungluu): NPAPI sends the result back to the plugin -- do we
3052 // need that? 3049 // need that?
3053 WebString result = container_->executeScriptURL(gurl, from_user_action); 3050 WebString result = container_->executeScriptURL(gurl, from_user_action);
3054 return result.isNull() ? PP_ERROR_FAILED : PP_OK; 3051 return result.isNull() ? PP_ERROR_FAILED : PP_OK;
3055 } 3052 }
3056 3053
3057 // Only GETs and POSTs are supported. 3054 // Only GETs and POSTs are supported.
3058 if (web_request.httpMethod() != "GET" && 3055 if (web_request.httpMethod() != "GET" && web_request.httpMethod() != "POST")
3059 web_request.httpMethod() != "POST")
3060 return PP_ERROR_BADARGUMENT; 3056 return PP_ERROR_BADARGUMENT;
3061 3057
3062 WebString target_str = WebString::fromUTF8(target); 3058 WebString target_str = WebString::fromUTF8(target);
3063 container_->loadFrameRequest(web_request, target_str, false, NULL); 3059 container_->loadFrameRequest(web_request, target_str, false, NULL);
3064 return PP_OK; 3060 return PP_OK;
3065 } 3061 }
3066 3062
3067 int PepperPluginInstanceImpl::MakePendingFileRefRendererHost( 3063 int PepperPluginInstanceImpl::MakePendingFileRefRendererHost(
3068 const base::FilePath& path) { 3064 const base::FilePath& path) {
3069 RendererPpapiHostImpl* host_impl = module_->renderer_ppapi_host(); 3065 RendererPpapiHostImpl* host_impl = module_->renderer_ppapi_host();
3070 PepperFileRefRendererHost* file_ref_host( 3066 PepperFileRefRendererHost* file_ref_host(
3071 new PepperFileRefRendererHost(host_impl, pp_instance(), 0, path)); 3067 new PepperFileRefRendererHost(host_impl, pp_instance(), 0, path));
3072 return host_impl->GetPpapiHost()->AddPendingResourceHost( 3068 return host_impl->GetPpapiHost()->AddPendingResourceHost(
3073 scoped_ptr<ppapi::host::ResourceHost>(file_ref_host)); 3069 scoped_ptr<ppapi::host::ResourceHost>(file_ref_host));
3074 } 3070 }
3075 3071
3076 void PepperPluginInstanceImpl::SetEmbedProperty(PP_Var key, 3072 void PepperPluginInstanceImpl::SetEmbedProperty(PP_Var key, PP_Var value) {
3077 PP_Var value) {
3078 message_channel_->SetReadOnlyProperty(key, value); 3073 message_channel_->SetReadOnlyProperty(key, value);
3079 } 3074 }
3080 3075
3081 bool PepperPluginInstanceImpl::CanAccessMainFrame() const { 3076 bool PepperPluginInstanceImpl::CanAccessMainFrame() const {
3082 if (!container_) 3077 if (!container_)
3083 return false; 3078 return false;
3084 blink::WebDocument containing_document = container_->element().document(); 3079 blink::WebDocument containing_document = container_->element().document();
3085 3080
3086 if (!containing_document.frame() || 3081 if (!containing_document.frame() || !containing_document.frame()->view() ||
3087 !containing_document.frame()->view() ||
3088 !containing_document.frame()->view()->mainFrame()) { 3082 !containing_document.frame()->view()->mainFrame()) {
3089 return false; 3083 return false;
3090 } 3084 }
3091 blink::WebDocument main_document = 3085 blink::WebDocument main_document =
3092 containing_document.frame()->view()->mainFrame()->document(); 3086 containing_document.frame()->view()->mainFrame()->document();
3093 3087
3094 return containing_document.securityOrigin().canAccess( 3088 return containing_document.securityOrigin().canAccess(
3095 main_document.securityOrigin()); 3089 main_document.securityOrigin());
3096 } 3090 }
3097 3091
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3143 bool PepperPluginInstanceImpl::IsMouseLocked() { 3137 bool PepperPluginInstanceImpl::IsMouseLocked() {
3144 return GetMouseLockDispatcher()->IsMouseLockedTo( 3138 return GetMouseLockDispatcher()->IsMouseLockedTo(
3145 GetOrCreateLockTargetAdapter()); 3139 GetOrCreateLockTargetAdapter());
3146 } 3140 }
3147 3141
3148 bool PepperPluginInstanceImpl::LockMouse() { 3142 bool PepperPluginInstanceImpl::LockMouse() {
3149 return GetMouseLockDispatcher()->LockMouse(GetOrCreateLockTargetAdapter()); 3143 return GetMouseLockDispatcher()->LockMouse(GetOrCreateLockTargetAdapter());
3150 } 3144 }
3151 3145
3152 MouseLockDispatcher::LockTarget* 3146 MouseLockDispatcher::LockTarget*
3153 PepperPluginInstanceImpl::GetOrCreateLockTargetAdapter() { 3147 PepperPluginInstanceImpl::GetOrCreateLockTargetAdapter() {
3154 if (!lock_target_.get()) { 3148 if (!lock_target_.get()) {
3155 lock_target_.reset(new PluginInstanceLockTarget(this)); 3149 lock_target_.reset(new PluginInstanceLockTarget(this));
3156 } 3150 }
3157 return lock_target_.get(); 3151 return lock_target_.get();
3158 } 3152 }
3159 3153
3160 MouseLockDispatcher* PepperPluginInstanceImpl::GetMouseLockDispatcher() { 3154 MouseLockDispatcher* PepperPluginInstanceImpl::GetMouseLockDispatcher() {
3161 if (flash_fullscreen_) { 3155 if (flash_fullscreen_) {
3162 RenderWidgetFullscreenPepper* container = 3156 RenderWidgetFullscreenPepper* container =
3163 static_cast<RenderWidgetFullscreenPepper*>(fullscreen_container_); 3157 static_cast<RenderWidgetFullscreenPepper*>(fullscreen_container_);
(...skipping 16 matching lines...) Expand all
3180 int pending_host_id, 3174 int pending_host_id,
3181 const ppapi::URLResponseInfoData& data) { 3175 const ppapi::URLResponseInfoData& data) {
3182 RendererPpapiHostImpl* host_impl = module_->renderer_ppapi_host(); 3176 RendererPpapiHostImpl* host_impl = module_->renderer_ppapi_host();
3183 3177
3184 if (host_impl->in_process_router()) { 3178 if (host_impl->in_process_router()) {
3185 // Running in-process, we can just create the resource and call the 3179 // Running in-process, we can just create the resource and call the
3186 // PPP_Instance function directly. 3180 // PPP_Instance function directly.
3187 scoped_refptr<ppapi::proxy::URLLoaderResource> loader_resource( 3181 scoped_refptr<ppapi::proxy::URLLoaderResource> loader_resource(
3188 new ppapi::proxy::URLLoaderResource( 3182 new ppapi::proxy::URLLoaderResource(
3189 host_impl->in_process_router()->GetPluginConnection(pp_instance()), 3183 host_impl->in_process_router()->GetPluginConnection(pp_instance()),
3190 pp_instance(), pending_host_id, data)); 3184 pp_instance(),
3185 pending_host_id,
3186 data));
3191 3187
3192 PP_Resource loader_pp_resource = loader_resource->GetReference(); 3188 PP_Resource loader_pp_resource = loader_resource->GetReference();
3193 if (!instance_interface_->HandleDocumentLoad( 3189 if (!instance_interface_->HandleDocumentLoad(pp_instance(),
3194 pp_instance(), loader_pp_resource)) 3190 loader_pp_resource))
3195 loader_resource->Close(); 3191 loader_resource->Close();
3196 // We don't pass a ref into the plugin, if it wants one, it will have taken 3192 // We don't pass a ref into the plugin, if it wants one, it will have taken
3197 // an additional one. 3193 // an additional one.
3198 ppapi::PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource( 3194 ppapi::PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(
3199 loader_pp_resource); 3195 loader_pp_resource);
3200 } else { 3196 } else {
3201 // Running out-of-process. Initiate an IPC call to notify the plugin 3197 // Running out-of-process. Initiate an IPC call to notify the plugin
3202 // process. 3198 // process.
3203 ppapi::proxy::HostDispatcher* dispatcher = 3199 ppapi::proxy::HostDispatcher* dispatcher =
3204 ppapi::proxy::HostDispatcher::GetForInstance(pp_instance()); 3200 ppapi::proxy::HostDispatcher::GetForInstance(pp_instance());
3205 dispatcher->Send(new PpapiMsg_PPPInstance_HandleDocumentLoad( 3201 dispatcher->Send(new PpapiMsg_PPPInstance_HandleDocumentLoad(
3206 ppapi::API_ID_PPP_INSTANCE, pp_instance(), pending_host_id, data)); 3202 ppapi::API_ID_PPP_INSTANCE, pp_instance(), pending_host_id, data));
3207 } 3203 }
3208 } 3204 }
3209 3205
3210 } // namespace content 3206 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698