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

Side by Side Diff: webkit/glue/plugins/pepper_var.cc

Issue 3323005: Unrevert 58354, reland PPAPI with the instance test disabled. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 3 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
« no previous file with comments | « webkit/glue/plugins/pepper_var.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/glue/plugins/pepper_var.h" 5 #include "webkit/glue/plugins/pepper_var.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "third_party/ppapi/c/pp_var.h" 11 #include "third_party/ppapi/c/pp_var.h"
12 #include "third_party/ppapi/c/ppb_var.h" 12 #include "third_party/ppapi/c/ppb_var.h"
13 #include "third_party/ppapi/c/ppp_class.h" 13 #include "third_party/ppapi/c/ppp_class.h"
14 #include "third_party/WebKit/WebKit/chromium/public/WebBindings.h" 14 #include "third_party/WebKit/WebKit/chromium/public/WebBindings.h"
15 #include "webkit/glue/plugins/pepper_string.h" 15 #include "webkit/glue/plugins/pepper_string.h"
16 #include "v8/include/v8.h" 16 #include "v8/include/v8.h"
17 17
18 using WebKit::WebBindings; 18 using WebKit::WebBindings;
19 19
20 namespace pepper { 20 namespace pepper {
21 21
22 namespace { 22 namespace {
23 23
24 void Release(PP_Var var); 24 void Release(PP_Var var);
25 PP_Var VarFromUtf8(const char* data, uint32_t len); 25 PP_Var VarFromUtf8(const char* data, uint32_t len);
26 26
27 // ---------------------------------------------------------------------------
28 // Exceptions
29
30 class TryCatch {
31 public:
32 TryCatch(PP_Var* exception) : exception_(exception) {
33 WebBindings::pushExceptionHandler(&TryCatch::Catch, this);
34 }
35
36 ~TryCatch() {
37 WebBindings::popExceptionHandler();
38 }
39
40 bool HasException() const {
41 return exception_ && exception_->type != PP_VARTYPE_VOID;
42 }
43
44 void SetException(const char* message) {
45 DCHECK(!HasException());
46 if (exception_)
47 *exception_ = VarFromUtf8(message, strlen(message));
48 }
49
50 private:
51 static void Catch(void* self, const NPUTF8* message) {
52 static_cast<TryCatch*>(self)->SetException(message);
53 }
54
55 // May be null if the consumer isn't interesting in catching exceptions.
56 PP_Var* exception_;
57 };
58
59 const char kInvalidObjectException[] = "Error: Invalid object"; 27 const char kInvalidObjectException[] = "Error: Invalid object";
60 const char kInvalidPropertyException[] = "Error: Invalid property"; 28 const char kInvalidPropertyException[] = "Error: Invalid property";
61 const char kUnableToGetPropertyException[] = "Error: Unable to get property"; 29 const char kUnableToGetPropertyException[] = "Error: Unable to get property";
62 const char kUnableToSetPropertyException[] = "Error: Unable to set property"; 30 const char kUnableToSetPropertyException[] = "Error: Unable to set property";
63 const char kUnableToRemovePropertyException[] = 31 const char kUnableToRemovePropertyException[] =
64 "Error: Unable to remove property"; 32 "Error: Unable to remove property";
65 const char kUnableToGetAllPropertiesException[] = 33 const char kUnableToGetAllPropertiesException[] =
66 "Error: Unable to get all properties"; 34 "Error: Unable to get all properties";
67 const char kUnableToCallMethodException[] = "Error: Unable to call method"; 35 const char kUnableToCallMethodException[] = "Error: Unable to call method";
68 const char kUnableToConstructException[] = "Error: Unable to construct"; 36 const char kUnableToConstructException[] = "Error: Unable to construct";
69 37
70 // --------------------------------------------------------------------------- 38 // ---------------------------------------------------------------------------
71 // Utilities 39 // Utilities
72 40
73 String* GetStringUnchecked(PP_Var var) { 41 String* GetStringUnchecked(PP_Var var) {
74 return reinterpret_cast<String*>(var.value.as_id); 42 return reinterpret_cast<String*>(var.value.as_id);
75 } 43 }
76 44
77 NPObject* GetNPObjectUnchecked(PP_Var var) { 45 NPObject* GetNPObjectUnchecked(PP_Var var) {
78 return reinterpret_cast<NPObject*>(var.value.as_id); 46 return reinterpret_cast<NPObject*>(var.value.as_id);
79 } 47 }
80 48
81 // Returns a PP_Var that corresponds to the given NPVariant. The contents of
82 // the NPVariant will be copied unless the NPVariant corresponds to an object.
83 PP_Var NPVariantToPPVar(const NPVariant* variant) {
84 switch (variant->type) {
85 case NPVariantType_Void:
86 return PP_MakeVoid();
87 case NPVariantType_Null:
88 return PP_MakeNull();
89 case NPVariantType_Bool:
90 return PP_MakeBool(NPVARIANT_TO_BOOLEAN(*variant));
91 case NPVariantType_Int32:
92 return PP_MakeInt32(NPVARIANT_TO_INT32(*variant));
93 case NPVariantType_Double:
94 return PP_MakeDouble(NPVARIANT_TO_DOUBLE(*variant));
95 case NPVariantType_String:
96 return VarFromUtf8(NPVARIANT_TO_STRING(*variant).UTF8Characters,
97 NPVARIANT_TO_STRING(*variant).UTF8Length);
98 case NPVariantType_Object:
99 return NPObjectToPPVar(NPVARIANT_TO_OBJECT(*variant));
100 }
101 NOTREACHED();
102 return PP_MakeVoid();
103 }
104
105 // Returns a NPVariant that corresponds to the given PP_Var. The contents of 49 // Returns a NPVariant that corresponds to the given PP_Var. The contents of
106 // the PP_Var will be copied unless the PP_Var corresponds to an object. 50 // the PP_Var will be copied unless the PP_Var corresponds to an object.
107 NPVariant PPVarToNPVariant(PP_Var var) { 51 NPVariant PPVarToNPVariant(PP_Var var) {
108 NPVariant ret; 52 NPVariant ret;
109 switch (var.type) { 53 switch (var.type) {
110 case PP_VARTYPE_VOID: 54 case PP_VARTYPE_VOID:
111 VOID_TO_NPVARIANT(ret); 55 VOID_TO_NPVARIANT(ret);
112 break; 56 break;
113 case PP_VARTYPE_NULL: 57 case PP_VARTYPE_NULL:
114 NULL_TO_NPVARIANT(ret); 58 NULL_TO_NPVARIANT(ret);
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 } 782 }
839 783
840 PP_Var NPObjectToPPVar(NPObject* object) { 784 PP_Var NPObjectToPPVar(NPObject* object) {
841 PP_Var ret; 785 PP_Var ret;
842 ret.type = PP_VARTYPE_OBJECT; 786 ret.type = PP_VARTYPE_OBJECT;
843 ret.value.as_id = reinterpret_cast<intptr_t>(object); 787 ret.value.as_id = reinterpret_cast<intptr_t>(object);
844 WebBindings::retainObject(object); 788 WebBindings::retainObject(object);
845 return ret; 789 return ret;
846 } 790 }
847 791
792 PP_Var NPVariantToPPVar(const NPVariant* variant) {
793 switch (variant->type) {
794 case NPVariantType_Void:
795 return PP_MakeVoid();
796 case NPVariantType_Null:
797 return PP_MakeNull();
798 case NPVariantType_Bool:
799 return PP_MakeBool(NPVARIANT_TO_BOOLEAN(*variant));
800 case NPVariantType_Int32:
801 return PP_MakeInt32(NPVARIANT_TO_INT32(*variant));
802 case NPVariantType_Double:
803 return PP_MakeDouble(NPVARIANT_TO_DOUBLE(*variant));
804 case NPVariantType_String:
805 return VarFromUtf8(NPVARIANT_TO_STRING(*variant).UTF8Characters,
806 NPVARIANT_TO_STRING(*variant).UTF8Length);
807 case NPVariantType_Object:
808 return NPObjectToPPVar(NPVARIANT_TO_OBJECT(*variant));
809 }
810 NOTREACHED();
811 return PP_MakeVoid();
812 }
813
814
848 NPObject* GetNPObject(PP_Var var) { 815 NPObject* GetNPObject(PP_Var var) {
849 if (var.type != PP_VARTYPE_OBJECT) 816 if (var.type != PP_VARTYPE_OBJECT)
850 return NULL; 817 return NULL;
851 return GetNPObjectUnchecked(var); 818 return GetNPObjectUnchecked(var);
852 } 819 }
853 820
854 PP_Var StringToPPVar(const std::string& str) { 821 PP_Var StringToPPVar(const std::string& str) {
855 DCHECK(IsStringUTF8(str)); 822 DCHECK(IsStringUTF8(str));
856 return VarFromUtf8(str.data(), str.size()); 823 return VarFromUtf8(str.data(), str.size());
857 } 824 }
858 825
859 String* GetString(PP_Var var) { 826 String* GetString(PP_Var var) {
860 if (var.type != PP_VARTYPE_STRING) 827 if (var.type != PP_VARTYPE_STRING)
861 return NULL; 828 return NULL;
862 return GetStringUnchecked(var); 829 return GetStringUnchecked(var);
863 } 830 }
864 831
832 TryCatch::TryCatch(PP_Var* exception) : exception_(exception) {
833 WebBindings::pushExceptionHandler(&TryCatch::Catch, this);
834 }
835
836 TryCatch::~TryCatch() {
837 WebBindings::popExceptionHandler();
838 }
839
840 bool TryCatch::HasException() const {
841 return exception_ && exception_->type != PP_VARTYPE_VOID;
842 }
843
844 void TryCatch::SetException(const char* message) {
845 DCHECK(!HasException());
846 if (exception_)
847 *exception_ = VarFromUtf8(message, strlen(message));
848 }
849
850 // static
851 void TryCatch::Catch(void* self, const char* message) {
852 static_cast<TryCatch*>(self)->SetException(message);
853 }
854
855
865 } // namespace pepper 856 } // namespace pepper
OLDNEW
« no previous file with comments | « webkit/glue/plugins/pepper_var.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698