OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 if (!graphics_3d->BindToInstance(true)) | 537 if (!graphics_3d->BindToInstance(true)) |
538 return false; | 538 return false; |
539 | 539 |
540 setBackingTextureId(graphics_3d->GetBackingTextureId()); | 540 setBackingTextureId(graphics_3d->GetBackingTextureId()); |
541 bound_graphics_ = graphics_3d; | 541 bound_graphics_ = graphics_3d; |
542 } | 542 } |
543 | 543 |
544 return true; | 544 return true; |
545 } | 545 } |
546 | 546 |
547 bool PluginInstance::SetCursor(PP_CursorType_Dev type) { | 547 bool PluginInstance::SetCursor(PP_CursorType_Dev type, |
548 if (type == PP_CURSORTYPE_CUSTOM) { | 548 PP_Resource custom_image, |
549 // TODO(neb): implement custom cursors. | 549 const PP_Point* hot_spot) { |
550 // (Remember that PP_CURSORTYPE_CUSTOM != WebCursorInfo::TypeCustom.) | 550 if (type != PP_CURSORTYPE_CUSTOM) { |
| 551 cursor_.reset(new WebCursorInfo(static_cast<WebCursorInfo::Type>(type))); |
| 552 return true; |
| 553 } |
| 554 |
| 555 if (!hot_spot) |
| 556 return false; |
| 557 |
| 558 scoped_refptr<PPB_ImageData_Impl> image_data( |
| 559 Resource::GetAs<PPB_ImageData_Impl>(custom_image)); |
| 560 if (!image_data.get()) |
| 561 return false; |
| 562 |
| 563 if (image_data->format() != PPB_ImageData_Impl::GetNativeImageDataFormat()) { |
| 564 // TODO(yzshen): Handle the case that the image format is different from the |
| 565 // native format. |
551 NOTIMPLEMENTED(); | 566 NOTIMPLEMENTED(); |
552 return false; | 567 return false; |
553 } | 568 } |
554 cursor_.reset(new WebCursorInfo(static_cast<WebCursorInfo::Type>(type))); | 569 |
| 570 ImageDataAutoMapper auto_mapper(image_data); |
| 571 if (!auto_mapper.is_valid()) |
| 572 return false; |
| 573 |
| 574 scoped_ptr<WebCursorInfo> custom_cursor( |
| 575 new WebCursorInfo(WebCursorInfo::TypeCustom)); |
| 576 custom_cursor->hotSpot.x = hot_spot->x; |
| 577 custom_cursor->hotSpot.y = hot_spot->y; |
| 578 |
| 579 #if WEBKIT_USING_SKIA |
| 580 const SkBitmap* bitmap = image_data->GetMappedBitmap(); |
| 581 // Make a deep copy, so that the cursor remains valid even after the original |
| 582 // image data gets freed. |
| 583 if (!bitmap->copyTo(&custom_cursor->customImage.getSkBitmap(), |
| 584 bitmap->config())) { |
| 585 return false; |
| 586 } |
| 587 #elif WEBKIT_USING_CG |
| 588 // TODO(yzshen): Implement it. |
| 589 NOTIMPLEMENTED(); |
| 590 return false; |
| 591 #endif |
| 592 |
| 593 cursor_.reset(custom_cursor.release()); |
555 return true; | 594 return true; |
556 } | 595 } |
557 | 596 |
558 PP_Var PluginInstance::ExecuteScript(PP_Var script, PP_Var* exception) { | 597 PP_Var PluginInstance::ExecuteScript(PP_Var script, PP_Var* exception) { |
559 TryCatch try_catch(module(), exception); | 598 TryCatch try_catch(module(), exception); |
560 if (try_catch.has_exception()) | 599 if (try_catch.has_exception()) |
561 return PP_MakeUndefined(); | 600 return PP_MakeUndefined(); |
562 | 601 |
563 // Convert the script into an inconvenient NPString object. | 602 // Convert the script into an inconvenient NPString object. |
564 scoped_refptr<StringVar> script_string(StringVar::FromPPVar(script)); | 603 scoped_refptr<StringVar> script_string(StringVar::FromPPVar(script)); |
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1355 return found->second; | 1394 return found->second; |
1356 } | 1395 } |
1357 | 1396 |
1358 bool PluginInstance::IsFullPagePlugin() const { | 1397 bool PluginInstance::IsFullPagePlugin() const { |
1359 WebFrame* frame = container()->element().document().frame(); | 1398 WebFrame* frame = container()->element().document().frame(); |
1360 return frame->view()->mainFrame()->document().isPluginDocument(); | 1399 return frame->view()->mainFrame()->document().isPluginDocument(); |
1361 } | 1400 } |
1362 | 1401 |
1363 } // namespace ppapi | 1402 } // namespace ppapi |
1364 } // namespace webkit | 1403 } // namespace webkit |
OLD | NEW |