OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" | 5 #include "content/renderer/browser_plugin/browser_plugin_bindings.h" |
6 | 6 |
7 #include <cstdlib> | 7 #include <cstdlib> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 using WebKit::WebString; | 34 using WebKit::WebString; |
35 | 35 |
36 namespace content { | 36 namespace content { |
37 | 37 |
38 namespace { | 38 namespace { |
39 | 39 |
40 const char kAddEventListener[] = "addEventListener"; | 40 const char kAddEventListener[] = "addEventListener"; |
41 const char kBackMethod[] = "back"; | 41 const char kBackMethod[] = "back"; |
42 const char kCanGoBack[] = "canGoBack"; | 42 const char kCanGoBack[] = "canGoBack"; |
43 const char kCanGoForward[] = "canGoForward"; | 43 const char kCanGoForward[] = "canGoForward"; |
| 44 const char kContentWindow[] = "contentWindow"; |
44 const char kForwardMethod[] = "forward"; | 45 const char kForwardMethod[] = "forward"; |
45 const char kGetProcessId[] = "getProcessId"; | 46 const char kGetProcessId[] = "getProcessId"; |
46 const char kGoMethod[] = "go"; | 47 const char kGoMethod[] = "go"; |
47 const char kPartitionAttribute[] = "partition"; | 48 const char kPartitionAttribute[] = "partition"; |
48 const char kReloadMethod[] = "reload"; | 49 const char kReloadMethod[] = "reload"; |
49 const char kRemoveEventListener[] = "removeEventListener"; | 50 const char kRemoveEventListener[] = "removeEventListener"; |
50 const char kSrcAttribute[] = "src"; | 51 const char kSrcAttribute[] = "src"; |
51 const char kStopMethod[] = "stop"; | 52 const char kStopMethod[] = "stop"; |
52 const char kTerminateMethod[] = "terminate"; | 53 const char kTerminateMethod[] = "terminate"; |
53 | 54 |
54 BrowserPluginBindings* GetBindings(NPObject* object) { | 55 BrowserPluginBindings* GetBindings(NPObject* object) { |
55 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> | 56 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> |
56 message_channel; | 57 message_channel; |
57 } | 58 } |
58 | 59 |
| 60 bool IdentifierIsContentWindow(NPIdentifier identifier) { |
| 61 return WebBindings::getStringIdentifier(kContentWindow) == identifier; |
| 62 } |
| 63 |
59 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) { | 64 bool IdentifierIsPartitionAttribute(NPIdentifier identifier) { |
60 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier; | 65 return WebBindings::getStringIdentifier(kPartitionAttribute) == identifier; |
61 } | 66 } |
62 | 67 |
63 bool IdentifierIsSrcAttribute(NPIdentifier identifier) { | 68 bool IdentifierIsSrcAttribute(NPIdentifier identifier) { |
64 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; | 69 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; |
65 } | 70 } |
66 | 71 |
67 int Int32FromNPVariant(const NPVariant& variant) { | 72 int Int32FromNPVariant(const NPVariant& variant) { |
68 if (NPVARIANT_IS_INT32(variant)) | 73 if (NPVARIANT_IS_INT32(variant)) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, | 139 bool BrowserPluginBindingsInvokeDefault(NPObject* np_obj, |
135 const NPVariant* args, | 140 const NPVariant* args, |
136 uint32 arg_count, | 141 uint32 arg_count, |
137 NPVariant* result) { | 142 NPVariant* result) { |
138 NOTIMPLEMENTED(); | 143 NOTIMPLEMENTED(); |
139 return false; | 144 return false; |
140 } | 145 } |
141 | 146 |
142 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { | 147 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { |
143 return IdentifierIsSrcAttribute(name) || | 148 return IdentifierIsSrcAttribute(name) || |
| 149 IdentifierIsContentWindow(name) || |
144 IdentifierIsPartitionAttribute(name); | 150 IdentifierIsPartitionAttribute(name); |
145 } | 151 } |
146 | 152 |
147 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, | 153 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, |
148 NPVariant* result) { | 154 NPVariant* result) { |
149 if (!np_obj) | 155 if (!np_obj) |
150 return false; | 156 return false; |
151 | 157 |
152 if (!result) | 158 if (!result) |
153 return false; | 159 return false; |
154 | 160 |
155 // All attributes from here on rely on the bindings, so retrieve it once and | 161 // All attributes from here on rely on the bindings, so retrieve it once and |
156 // return on failure. | 162 // return on failure. |
157 BrowserPluginBindings* bindings = GetBindings(np_obj); | 163 BrowserPluginBindings* bindings = GetBindings(np_obj); |
158 if (!bindings) | 164 if (!bindings) |
159 return false; | 165 return false; |
160 | 166 |
161 if (IdentifierIsSrcAttribute(name)) { | 167 if (IdentifierIsSrcAttribute(name)) { |
162 std::string src = bindings->instance()->GetSrcAttribute(); | 168 std::string src = bindings->instance()->GetSrcAttribute(); |
163 return StringToNPVariant(src, result); | 169 return StringToNPVariant(src, result); |
164 } | 170 } |
165 | 171 |
| 172 if (IdentifierIsContentWindow(name)) { |
| 173 NPObject* obj = bindings->instance()->GetContentWindow(); |
| 174 if (obj) { |
| 175 result->type = NPVariantType_Object; |
| 176 result->value.objectValue = WebBindings::retainObject(obj); |
| 177 } |
| 178 return true; |
| 179 } |
| 180 |
166 if (IdentifierIsPartitionAttribute(name)) { | 181 if (IdentifierIsPartitionAttribute(name)) { |
167 std::string partition_id = bindings->instance()->GetPartitionAttribute(); | 182 std::string partition_id = bindings->instance()->GetPartitionAttribute(); |
168 return StringToNPVariant(partition_id, result); | 183 return StringToNPVariant(partition_id, result); |
169 } | 184 } |
170 | 185 |
171 return false; | 186 return false; |
172 } | 187 } |
173 | 188 |
174 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name, | 189 bool BrowserPluginBindingsSetProperty(NPObject* np_obj, NPIdentifier name, |
175 const NPVariant* variant) { | 190 const NPVariant* variant) { |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 for (BindingList::iterator iter = method_bindings_.begin(); | 536 for (BindingList::iterator iter = method_bindings_.begin(); |
522 iter != method_bindings_.end(); | 537 iter != method_bindings_.end(); |
523 ++iter) { | 538 ++iter) { |
524 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count) | 539 if ((*iter)->MatchesName(name) && (*iter)->arg_count() == arg_count) |
525 return (*iter)->Invoke(this, args, result); | 540 return (*iter)->Invoke(this, args, result); |
526 } | 541 } |
527 return false; | 542 return false; |
528 } | 543 } |
529 | 544 |
530 } // namespace content | 545 } // namespace content |
OLD | NEW |