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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin_bindings.cc

Issue 10960003: Browser Plugin: Implement Back, Forward, and Go. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added a test Created 8 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
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/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"
11 #include "base/logging.h"
12 #include "base/message_loop.h" 11 #include "base/message_loop.h"
13 #include "base/string16.h" 12 #include "base/string16.h"
14 #include "base/string_split.h" 13 #include "base/string_split.h"
15 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
16 #include "content/renderer/browser_plugin/browser_plugin.h" 15 #include "content/renderer/browser_plugin/browser_plugin.h"
17 #include "third_party/npapi/bindings/npapi.h" 16 #include "third_party/npapi/bindings/npapi.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMMessageEvent.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMMessageEvent.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h"
(...skipping 10 matching lines...) Expand all
32 using WebKit::WebDOMMessageEvent; 31 using WebKit::WebDOMMessageEvent;
33 using WebKit::WebPluginContainer; 32 using WebKit::WebPluginContainer;
34 using WebKit::WebSerializedScriptValue; 33 using WebKit::WebSerializedScriptValue;
35 using WebKit::WebString; 34 using WebKit::WebString;
36 35
37 namespace content { 36 namespace content {
38 37
39 namespace { 38 namespace {
40 39
41 const char kAddEventListener[] = "addEventListener"; 40 const char kAddEventListener[] = "addEventListener";
41 const char kBackMethod[] = "back";
42 const char kForwardMethod[] = "forward";
43 const char kGoMethod[] = "go";
42 const char kRemoveEventListener[] = "removeEventListener"; 44 const char kRemoveEventListener[] = "removeEventListener";
43 const char kSrcAttribute[] = "src"; 45 const char kSrcAttribute[] = "src";
44 46
45 BrowserPluginBindings* GetBindings(NPObject* object) { 47 BrowserPluginBindings* GetBindings(NPObject* object) {
46 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)-> 48 return static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(object)->
47 message_channel; 49 message_channel;
48 } 50 }
49 51
50 bool IdentifierIsAddEventListener(NPIdentifier identifier) { 52 bool IdentifierIsAddEventListener(NPIdentifier identifier) {
51 return WebBindings::getStringIdentifier(kAddEventListener) == identifier; 53 return WebBindings::getStringIdentifier(kAddEventListener) == identifier;
52 } 54 }
53 55
56 bool IdentifierIsBackMethod(NPIdentifier identifier) {
57 return WebBindings::getStringIdentifier(kBackMethod) == identifier;
58 }
59
60 bool IdentifierIsForwardMethod(NPIdentifier identifier) {
61 return WebBindings::getStringIdentifier(kForwardMethod) == identifier;
62 }
63
64 bool IdentifierIsGoMethod(NPIdentifier identifier) {
65 return WebBindings::getStringIdentifier(kGoMethod) == identifier;
66 }
67
54 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) { 68 bool IdentifierIsRemoveEventListener(NPIdentifier identifier) {
55 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier; 69 return WebBindings::getStringIdentifier(kRemoveEventListener) == identifier;
56 } 70 }
57 71
58 bool IdentifierIsSrcAttribute(NPIdentifier identifier) { 72 bool IdentifierIsSrcAttribute(NPIdentifier identifier) {
59 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier; 73 return WebBindings::getStringIdentifier(kSrcAttribute) == identifier;
60 } 74 }
61 75
76 int Int32FromNPVariant(const NPVariant& variant) {
77 if (NPVARIANT_IS_INT32(variant))
78 return NPVARIANT_TO_INT32(variant);
79
80 if (NPVARIANT_IS_DOUBLE(variant))
81 return NPVARIANT_TO_DOUBLE(variant);
82
83 return 0;
84 }
85
62 std::string StringFromNPVariant(const NPVariant& variant) { 86 std::string StringFromNPVariant(const NPVariant& variant) {
63 if (!NPVARIANT_IS_STRING(variant)) 87 if (!NPVARIANT_IS_STRING(variant))
64 return std::string(); 88 return std::string();
65 const NPString& np_string = NPVARIANT_TO_STRING(variant); 89 const NPString& np_string = NPVARIANT_TO_STRING(variant);
66 return std::string(np_string.UTF8Characters, np_string.UTF8Length); 90 return std::string(np_string.UTF8Characters, np_string.UTF8Length);
67 } 91 }
68 92
69 string16 String16FromNPVariant(const NPVariant& variant) { 93 string16 String16FromNPVariant(const NPVariant& variant) {
70 if (!NPVARIANT_IS_STRING(variant)) 94 if (!NPVARIANT_IS_STRING(variant))
71 return string16(); 95 return string16();
(...skipping 30 matching lines...) Expand all
102 delete instance; 126 delete instance;
103 } 127 }
104 128
105 bool BrowserPluginBindingsHasMethod(NPObject* np_obj, NPIdentifier name) { 129 bool BrowserPluginBindingsHasMethod(NPObject* np_obj, NPIdentifier name) {
106 if (!np_obj) 130 if (!np_obj)
107 return false; 131 return false;
108 132
109 if (IdentifierIsAddEventListener(name)) 133 if (IdentifierIsAddEventListener(name))
110 return true; 134 return true;
111 135
136 if (IdentifierIsBackMethod(name))
137 return true;
138
139 if (IdentifierIsForwardMethod(name))
140 return true;
141
142 if (IdentifierIsGoMethod(name))
143 return true;
144
112 if (IdentifierIsRemoveEventListener(name)) 145 if (IdentifierIsRemoveEventListener(name))
113 return true; 146 return true;
114 147
115 return false; 148 return false;
116 } 149 }
117 150
118 bool BrowserPluginBindingsInvoke(NPObject* np_obj, NPIdentifier name, 151 bool BrowserPluginBindingsInvoke(NPObject* np_obj, NPIdentifier name,
119 const NPVariant* args, uint32 arg_count, 152 const NPVariant* args, uint32 arg_count,
120 NPVariant* result) { 153 NPVariant* result) {
121 if (!np_obj) 154 if (!np_obj)
(...skipping 10 matching lines...) Expand all
132 165
133 v8::Local<v8::Value> value = 166 v8::Local<v8::Value> value =
134 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1])); 167 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
135 if (value.IsEmpty() || !value->IsFunction()) 168 if (value.IsEmpty() || !value->IsFunction())
136 return false; 169 return false;
137 170
138 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value); 171 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
139 return bindings->instance()->AddEventListener(event_name, function); 172 return bindings->instance()->AddEventListener(event_name, function);
140 } 173 }
141 174
175 if (IdentifierIsBackMethod(name) && !arg_count) {
176 bindings->instance()->Back();
177 return true;
178 }
179
180 if (IdentifierIsForwardMethod(name) && !arg_count) {
181 bindings->instance()->Forward();
182 return true;
183 }
184
185 if (IdentifierIsGoMethod(name) && arg_count == 1) {
186 bindings->instance()->Go(Int32FromNPVariant(args[0]));
187 return true;
188 }
189
142 if (IdentifierIsRemoveEventListener(name) && arg_count == 2) { 190 if (IdentifierIsRemoveEventListener(name) && arg_count == 2) {
143 std::string event_name = StringFromNPVariant(args[0]); 191 std::string event_name = StringFromNPVariant(args[0]);
144 if (event_name.empty()) 192 if (event_name.empty())
145 return false; 193 return false;
146 194
147 v8::Local<v8::Value> value = 195 v8::Local<v8::Value> value =
148 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1])); 196 v8::Local<v8::Value>::New(WebBindings::toV8Value(&args[1]));
149 197
150 if (value.IsEmpty() || !value->IsFunction()) 198 if (value.IsEmpty() || !value->IsFunction())
151 return false; 199 return false;
(...skipping 15 matching lines...) Expand all
167 215
168 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) { 216 bool BrowserPluginBindingsHasProperty(NPObject* np_obj, NPIdentifier name) {
169 return IdentifierIsSrcAttribute(name); 217 return IdentifierIsSrcAttribute(name);
170 } 218 }
171 219
172 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name, 220 bool BrowserPluginBindingsGetProperty(NPObject* np_obj, NPIdentifier name,
173 NPVariant* result) { 221 NPVariant* result) {
174 if (!np_obj) 222 if (!np_obj)
175 return false; 223 return false;
176 224
177 if (IdentifierIsAddEventListener(name) ||
178 IdentifierIsRemoveEventListener(name))
179 return false;
180
181 if (IdentifierIsSrcAttribute(name)) { 225 if (IdentifierIsSrcAttribute(name)) {
182 BrowserPluginBindings* bindings = GetBindings(np_obj); 226 BrowserPluginBindings* bindings = GetBindings(np_obj);
183 if (!bindings) 227 if (!bindings)
184 return false; 228 return false;
185 std::string src = bindings->instance()->GetSrcAttribute(); 229 std::string src = bindings->instance()->GetSrcAttribute();
186 return StringToNPVariant(src, result); 230 return StringToNPVariant(src, result);
187 } 231 }
188 232
189 return false; 233 return false;
190 } 234 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 WebBindings::createObject(NULL, &browser_plugin_message_class); 288 WebBindings::createObject(NULL, &browser_plugin_message_class);
245 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj); 289 np_object_ = static_cast<BrowserPluginBindings::BrowserPluginNPObject*>(obj);
246 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr(); 290 np_object_->message_channel = weak_ptr_factory_.GetWeakPtr();
247 } 291 }
248 292
249 BrowserPluginBindings::~BrowserPluginBindings() { 293 BrowserPluginBindings::~BrowserPluginBindings() {
250 WebBindings::releaseObject(np_object_); 294 WebBindings::releaseObject(np_object_);
251 } 295 }
252 296
253 } // namespace content 297 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698