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

Side by Side Diff: chrome_frame/chrome_frame_npapi.cc

Issue 521072: Attempt 2 at landing this.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 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 | « chrome_frame/chrome_frame_activex_base.h ('k') | chrome_frame/chrome_frame_npapi_entrypoints.h » ('j') | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome_frame/chrome_frame_npapi.h" 5 #include "chrome_frame/chrome_frame_npapi.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 COMPILE_ASSERT(arraysize(plugin_method_identifier_names_) == 79 COMPILE_ASSERT(arraysize(plugin_method_identifier_names_) ==
80 arraysize(plugin_methods_), 80 arraysize(plugin_methods_),
81 you_must_add_both_plugin_method_and_name); 81 you_must_add_both_plugin_method_and_name);
82 82
83 COMPILE_ASSERT(arraysize(plugin_property_identifier_names_) == 83 COMPILE_ASSERT(arraysize(plugin_property_identifier_names_) ==
84 arraysize(plugin_property_identifiers_), 84 arraysize(plugin_property_identifiers_),
85 you_must_add_both_plugin_property_and_name); 85 you_must_add_both_plugin_property_and_name);
86 } 86 }
87 87
88 static const int kMaxBytesForPluginConsumption = 0x7FFFFFFF;
89
90 static const char kPluginSrcAttribute[] = "src"; 88 static const char kPluginSrcAttribute[] = "src";
91 static const char kPluginForceFullPageAttribute[] = "force_full_page"; 89 static const char kPluginForceFullPageAttribute[] = "force_full_page";
92 static const char kPluginOnloadAttribute[] = "onload"; 90 static const char kPluginOnloadAttribute[] = "onload";
93 static const char kPluginOnErrorAttribute[] = "onloaderror"; 91 static const char kPluginOnErrorAttribute[] = "onloaderror";
94 static const char kPluginOnMessageAttribute[] = "onmessage"; 92 static const char kPluginOnMessageAttribute[] = "onmessage";
95 static const char kPluginOnPrivateMessageAttribute[] = "onprivatemessage"; 93 static const char kPluginOnPrivateMessageAttribute[] = "onprivatemessage";
96 // These properties can only be set in arguments at control instantiation. 94 // These properties can only be set in arguments at control instantiation.
97 // When the privileged_mode property is provided and set to true, the control 95 // When the privileged_mode property is provided and set to true, the control
98 // will probe for whether its hosting document has the system principal, in 96 // will probe for whether its hosting document has the system principal, in
99 // which case privileged mode will be enabled. 97 // which case privileged mode will be enabled.
100 static const char kPluginPrivilegedModeAttribute[] = "privileged_mode"; 98 static const char kPluginPrivilegedModeAttribute[] = "privileged_mode";
101 // If privileged mode is enabled, the string value of this argument will 99 // If privileged mode is enabled, the string value of this argument will
102 // be appended to the chrome.exe command line. 100 // be appended to the chrome.exe command line.
103 static const char kPluginChromeExtraArguments[] = "chrome_extra_arguments"; 101 static const char kPluginChromeExtraArguments[] = "chrome_extra_arguments";
104 // If privileged mode is enabled, the string value of this argument will 102 // If privileged mode is enabled, the string value of this argument will
105 // be used as the profile name for our chrome.exe instance. 103 // be used as the profile name for our chrome.exe instance.
106 static const char kPluginChromeProfileName[] = "chrome_profile_name"; 104 static const char kPluginChromeProfileName[] = "chrome_profile_name";
107 // If privileged mode is enabled, this argument will be taken as a 105 // If privileged mode is enabled, this argument will be taken as a
108 // comma-separated list of API function calls to automate. 106 // comma-separated list of API function calls to automate.
109 static const char kPluginChromeFunctionsAutomatedAttribute[] = 107 static const char kPluginChromeFunctionsAutomatedAttribute[] =
110 "chrome_functions_automated"; 108 "chrome_functions_automated";
111 // If chrome network stack is to be used 109 // If chrome network stack is to be used
112 static const char kPluginUseChromeNetwork[] = "usechromenetwork"; 110 static const char kPluginUseChromeNetwork[] = "usechromenetwork";
113 111
114
115 NPError NPP_New(NPMIMEType plugin_type, NPP instance, uint16 mode, int16 argc,
116 char* argn[], char* argv[], NPSavedData* saved) {
117 if (instance == NULL)
118 return NPERR_INVALID_INSTANCE_ERROR;
119
120 ChromeFrameNPAPI::ChromeFrameNPObject* chrome_frame_npapi_obj =
121 reinterpret_cast<ChromeFrameNPAPI::ChromeFrameNPObject*>(
122 npapi::CreateObject(instance, ChromeFrameNPAPI::PluginClass()));
123 DCHECK(chrome_frame_npapi_obj != NULL);
124
125 ChromeFrameNPAPI* plugin_instance =
126 chrome_frame_npapi_obj->chrome_frame_plugin_instance;
127 DCHECK(plugin_instance != NULL);
128
129 // Note that we MUST set instance->pdata BEFORE calling Initialize. This is
130 // because Initialize can call back into the NPAPI host which will need the
131 // pdata field to be set.
132 chrome_frame_npapi_obj->chrome_frame_plugin_instance =
133 plugin_instance;
134 instance->pdata = chrome_frame_npapi_obj;
135
136 bool init = plugin_instance->Initialize(plugin_type, instance,
137 mode, argc, argn, argv);
138 DCHECK(init);
139
140 return NPERR_NO_ERROR;
141 }
142
143 NPError NPP_Destroy(NPP instance, NPSavedData** save) {
144 // Takes ownership and releases the object at the end of scope.
145 ScopedNpObject<ChromeFrameNPAPI::ChromeFrameNPObject> chrome_frame_npapi_obj(
146 reinterpret_cast<ChromeFrameNPAPI::ChromeFrameNPObject*>(
147 instance->pdata));
148
149 if (chrome_frame_npapi_obj.get()) {
150 ChromeFrameNPAPI* plugin_instance =
151 ChromeFrameNPAPI::ChromeFrameInstanceFromPluginInstance(instance);
152
153 plugin_instance->Uninitialize();
154 instance->pdata = NULL;
155 }
156
157 return NPERR_NO_ERROR;
158 }
159
160 NPError NPP_SetWindow(NPP instance, NPWindow* window_info) {
161 if (window_info == NULL) {
162 NOTREACHED();
163 return NPERR_GENERIC_ERROR;
164 }
165
166 ChromeFrameNPAPI* plugin_instance =
167 ChromeFrameNPAPI::ChromeFrameInstanceFromPluginInstance(instance);
168
169 if (plugin_instance == NULL) {
170 return NPERR_INVALID_INSTANCE_ERROR;
171 }
172
173 plugin_instance->SetWindow(window_info);
174 return NPERR_NO_ERROR;
175 }
176
177 NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
178 NPBool seekable, uint16* stream_type) {
179 NPAPIUrlRequest* url_request = ChromeFrameNPAPI::ValidateRequest(
180 instance, stream->notifyData);
181 if (url_request) {
182 if (!url_request->OnStreamCreated(type, stream))
183 return NPERR_GENERIC_ERROR;
184 }
185
186 // We need to return the requested stream mode if we are returning a success
187 // code. If we don't do this it causes Opera to blow up.
188 *stream_type = NP_NORMAL;
189 return NPERR_NO_ERROR;
190 }
191
192 NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason) {
193 NPAPIUrlRequest* url_request = ChromeFrameNPAPI::ValidateRequest(
194 instance, stream->notifyData);
195 if (url_request) {
196 url_request->OnStreamDestroyed(reason);
197 }
198
199 return NPERR_NO_ERROR;
200 }
201
202 NPError NPP_GetValue(NPP instance, NPPVariable variable, void* value) {
203 if (variable == NPPVpluginScriptableNPObject) {
204 void** plugin = reinterpret_cast<void**>(value);
205 ChromeFrameNPAPI::ChromeFrameNPObject* chrome_frame_npapi_obj =
206 reinterpret_cast<ChromeFrameNPAPI::ChromeFrameNPObject*>(
207 instance->pdata);
208 // Return value is expected to be retained
209 npapi::RetainObject(reinterpret_cast<NPObject*>(chrome_frame_npapi_obj));
210 *plugin = chrome_frame_npapi_obj;
211 return NPERR_NO_ERROR;
212 }
213 return NPERR_GENERIC_ERROR;
214 }
215
216 NPError NPP_SetValue(NPP instance, NPNVariable variable, void* value) {
217 return NPERR_GENERIC_ERROR;
218 }
219
220 int32 NPP_WriteReady(NPP instance, NPStream* stream) {
221 NPAPIUrlRequest* url_request = ChromeFrameNPAPI::ValidateRequest(
222 instance, stream->notifyData);
223 if (url_request) {
224 return url_request->OnWriteReady();
225 }
226
227 return kMaxBytesForPluginConsumption;
228 }
229
230 int32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len,
231 void* buffer) {
232 NPAPIUrlRequest* url_request = ChromeFrameNPAPI::ValidateRequest(
233 instance, stream->notifyData);
234 if (url_request) {
235 return url_request->OnWrite(buffer, len);
236 }
237
238 return len;
239 }
240
241 void NPP_URLNotify(NPP instance, const char* url, NPReason reason,
242 void* notifyData) {
243 ChromeFrameNPAPI* plugin_instance =
244 ChromeFrameNPAPI::ChromeFrameInstanceFromPluginInstance(instance);
245 if (plugin_instance) {
246 plugin_instance->UrlNotify(url, reason, notifyData);
247 }
248 }
249
250 void NPP_Print(NPP instance, NPPrint* print_info) {
251 ChromeFrameNPAPI* plugin_instance =
252 ChromeFrameNPAPI::ChromeFrameInstanceFromPluginInstance(instance);
253
254 if (plugin_instance == NULL) {
255 NOTREACHED();
256 return;
257 }
258
259 plugin_instance->Print(print_info);
260 }
261
262 // ChromeFrameNPAPI member defines. 112 // ChromeFrameNPAPI member defines.
263 113
264 // TODO(tommi): remove ignore_setfocus_ since that's not how focus is 114 // TODO(tommi): remove ignore_setfocus_ since that's not how focus is
265 // handled anymore. 115 // handled anymore.
266 116
267 ChromeFrameNPAPI::ChromeFrameNPAPI() 117 ChromeFrameNPAPI::ChromeFrameNPAPI()
268 : instance_(NULL), 118 : instance_(NULL),
269 mode_(NP_EMBED), 119 mode_(NP_EMBED),
270 force_full_page_plugin_(false), 120 force_full_page_plugin_(false),
271 ready_state_(READYSTATE_LOADING), 121 ready_state_(READYSTATE_LOADING),
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1605 return request; 1455 return request;
1606 } 1456 }
1607 1457
1608 bool ChromeFrameNPAPI::HandleContextMenuCommand(UINT cmd, 1458 bool ChromeFrameNPAPI::HandleContextMenuCommand(UINT cmd,
1609 const IPC::ContextMenuParams& params) { 1459 const IPC::ContextMenuParams& params) {
1610 if (cmd == IDC_ABOUT_CHROME_FRAME) { 1460 if (cmd == IDC_ABOUT_CHROME_FRAME) {
1611 // TODO: implement "About Chrome Frame" 1461 // TODO: implement "About Chrome Frame"
1612 } 1462 }
1613 return false; 1463 return false;
1614 } 1464 }
OLDNEW
« no previous file with comments | « chrome_frame/chrome_frame_activex_base.h ('k') | chrome_frame/chrome_frame_npapi_entrypoints.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698