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

Side by Side Diff: content/test/plugin/plugin_geturl_test.cc

Issue 62203013: Add regression test for 301510 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync Created 7 years, 1 month 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 | « content/test/plugin/plugin_geturl_test.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) 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 "content/test/plugin/plugin_geturl_test.h" 5 #include "content/test/plugin/plugin_geturl_test.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 11 matching lines...) Expand all
22 // The identifier for the fetched url stream. 22 // The identifier for the fetched url stream.
23 #define FETCHED_URL_STREAM_ID 2 23 #define FETCHED_URL_STREAM_ID 2
24 24
25 // url for testing GetURL with a bogus URL. 25 // url for testing GetURL with a bogus URL.
26 #define BOGUS_URL "bogoproto:///x:/asdf.xysdhffieasdf.asdhj/" 26 #define BOGUS_URL "bogoproto:///x:/asdf.xysdhffieasdf.asdhj/"
27 27
28 // url for testing redirect notifications sent to plugins. 28 // url for testing redirect notifications sent to plugins.
29 #define REDIRECT_SRC_URL \ 29 #define REDIRECT_SRC_URL \
30 "http://mock.http/npapi/plugin_read_page_redirect_src.html" 30 "http://mock.http/npapi/plugin_read_page_redirect_src.html"
31 31
32 // The notification id for the redirect notification url. 32 // The notification id for the redirect notification url that we will cancel.
33 #define REDIRECT_SRC_URL_NOTIFICATION_ID 4 33 #define REDIRECT_SRC_URL_NOTIFICATION_CANCEL_ID 4
34
35 // The notification id for the redirect notification url that we will accept.
36 #define REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID 5
34 37
35 // The identifier for the bogus url stream. 38 // The identifier for the bogus url stream.
36 #define BOGUS_URL_STREAM_ID 3 39 #define BOGUS_URL_STREAM_ID 3
37 40
38 // The maximum chunk size of stream data. 41 // The maximum chunk size of stream data.
39 #define STREAM_CHUNK 197 42 #define STREAM_CHUNK 197
40 43
41 namespace NPAPIClient { 44 namespace NPAPIClient {
42 45
43 PluginGetURLTest::PluginGetURLTest(NPP id, NPNetscapeFuncs *host_functions) 46 PluginGetURLTest::PluginGetURLTest(NPP id, NPNetscapeFuncs *host_functions)
44 : PluginTest(id, host_functions), 47 : PluginTest(id, host_functions),
45 tests_started_(false), 48 tests_started_(false),
46 tests_in_progress_(0), 49 tests_in_progress_(0),
47 test_file_(NULL), 50 test_file_(NULL),
48 expect_404_response_(false), 51 expect_404_response_(false),
49 npn_evaluate_context_(false), 52 npn_evaluate_context_(false),
50 handle_url_redirects_(false), 53 handle_url_redirects_(false),
51 received_url_redirect_notification_(false), 54 received_url_redirect_cancel_notification_(false),
55 received_url_redirect_allow_notification_(false),
52 check_cookies_(false) { 56 check_cookies_(false) {
53 } 57 }
54 58
55 PluginGetURLTest::~PluginGetURLTest() {} 59 PluginGetURLTest::~PluginGetURLTest() {}
56 60
57 NPError PluginGetURLTest::New(uint16 mode, int16 argc, const char* argn[], 61 NPError PluginGetURLTest::New(uint16 mode, int16 argc, const char* argn[],
58 const char* argv[], NPSavedData* saved) { 62 const char* argv[], NPSavedData* saved) {
59 const char* page_not_found_url = GetArgValue("page_not_found_url", argc, 63 const char* page_not_found_url = GetArgValue("page_not_found_url", argc,
60 argn, argv); 64 argn, argv);
61 if (page_not_found_url) { 65 if (page_not_found_url) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 HostFunctions()->geturl(id(), fail_write_url_.c_str(), NULL); 111 HostFunctions()->geturl(id(), fail_write_url_.c_str(), NULL);
108 return NPERR_NO_ERROR; 112 return NPERR_NO_ERROR;
109 } else if (!referrer_target_url_.empty()) { 113 } else if (!referrer_target_url_.empty()) {
110 HostFunctions()->pushpopupsenabledstate(id(), true); 114 HostFunctions()->pushpopupsenabledstate(id(), true);
111 HostFunctions()->geturl(id(), referrer_target_url_.c_str(), "_blank"); 115 HostFunctions()->geturl(id(), referrer_target_url_.c_str(), "_blank");
112 HostFunctions()->poppopupsenabledstate(id()); 116 HostFunctions()->poppopupsenabledstate(id());
113 return NPERR_NO_ERROR; 117 return NPERR_NO_ERROR;
114 } else if (handle_url_redirects_) { 118 } else if (handle_url_redirects_) {
115 HostFunctions()->geturlnotify( 119 HostFunctions()->geturlnotify(
116 id(), REDIRECT_SRC_URL, NULL, 120 id(), REDIRECT_SRC_URL, NULL,
117 reinterpret_cast<void*>(REDIRECT_SRC_URL_NOTIFICATION_ID)); 121 reinterpret_cast<void*>(REDIRECT_SRC_URL_NOTIFICATION_CANCEL_ID));
118 return NPERR_NO_ERROR; 122 return NPERR_NO_ERROR;
119 } else if (check_cookies_) { 123 } else if (check_cookies_) {
120 HostFunctions()->geturlnotify( 124 HostFunctions()->geturlnotify(
121 id(), 125 id(),
122 "plugin_ref_target_page.html", 126 "plugin_ref_target_page.html",
123 NULL, 127 NULL,
124 reinterpret_cast<void*>(SELF_URL_STREAM_ID)); 128 reinterpret_cast<void*>(SELF_URL_STREAM_ID));
125 return NPERR_NO_ERROR; 129 return NPERR_NO_ERROR;
126 } 130 }
127 131
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 214
211 test_file_ = file_util::OpenFile(path, "r"); 215 test_file_ = file_util::OpenFile(path, "r");
212 if (!test_file_) { 216 if (!test_file_) {
213 SetError("Could not open source file"); 217 SetError("Could not open source file");
214 } 218 }
215 } 219 }
216 break; 220 break;
217 case BOGUS_URL_STREAM_ID: 221 case BOGUS_URL_STREAM_ID:
218 SetError("Unexpected NewStream for BOGUS_URL"); 222 SetError("Unexpected NewStream for BOGUS_URL");
219 break; 223 break;
220 case REDIRECT_SRC_URL_NOTIFICATION_ID: 224 case REDIRECT_SRC_URL_NOTIFICATION_CANCEL_ID:
221 SetError("Should not redirect to URL when plugin denied it."); 225 SetError("Should not redirect to URL when plugin denied it.");
222 break; 226 break;
227 case REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID:
228 break;
223 default: 229 default:
224 SetError("Unexpected NewStream callback"); 230 SetError("Unexpected NewStream callback");
225 break; 231 break;
226 } 232 }
227 return NPERR_NO_ERROR; 233 return NPERR_NO_ERROR;
228 } 234 }
229 235
230 int32 PluginGetURLTest::WriteReady(NPStream *stream) { 236 int32 PluginGetURLTest::WriteReady(NPStream *stream) {
231 if (test_completed()) { 237 if (test_completed()) {
232 return PluginTest::WriteReady(stream); 238 return PluginTest::WriteReady(stream);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 // bytes. But this is not likely. 293 // bytes. But this is not likely.
288 if (bytes != len) 294 if (bytes != len)
289 SetError("Did not read correct bytelength from source file"); 295 SetError("Did not read correct bytelength from source file");
290 if (memcmp(read_buffer, buffer, len)) 296 if (memcmp(read_buffer, buffer, len))
291 SetError("Content mismatch between data and source!"); 297 SetError("Content mismatch between data and source!");
292 } 298 }
293 break; 299 break;
294 case BOGUS_URL_STREAM_ID: 300 case BOGUS_URL_STREAM_ID:
295 SetError("Unexpected write callback for BOGUS_URL"); 301 SetError("Unexpected write callback for BOGUS_URL");
296 break; 302 break;
303 case REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID:
304 break;
297 default: 305 default:
298 SetError("Unexpected write callback"); 306 SetError("Unexpected write callback");
299 break; 307 break;
300 } 308 }
301 // Pretend that we took all the data. 309 // Pretend that we took all the data.
302 return len; 310 return len;
303 } 311 }
304 312
305 313
306 NPError PluginGetURLTest::DestroyStream(NPStream *stream, NPError reason) { 314 NPError PluginGetURLTest::DestroyStream(NPStream *stream, NPError reason) {
(...skipping 26 matching lines...) Expand all
333 SignalTestCompleted(); 341 SignalTestCompleted();
334 return NPERR_NO_ERROR; 342 return NPERR_NO_ERROR;
335 } 343 }
336 344
337 unsigned long stream_id = 345 unsigned long stream_id =
338 reinterpret_cast<unsigned long>(stream->notifyData); 346 reinterpret_cast<unsigned long>(stream->notifyData);
339 switch (stream_id) { 347 switch (stream_id) {
340 case SELF_URL_STREAM_ID: 348 case SELF_URL_STREAM_ID:
341 // don't care 349 // don't care
342 break; 350 break;
351 case REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID:
352 break;
343 case FETCHED_URL_STREAM_ID: 353 case FETCHED_URL_STREAM_ID:
344 { 354 {
345 char read_buffer[STREAM_CHUNK]; 355 char read_buffer[STREAM_CHUNK];
346 size_t bytes = fread(read_buffer, 1, sizeof(read_buffer), test_file_); 356 size_t bytes = fread(read_buffer, 1, sizeof(read_buffer), test_file_);
347 if (bytes != 0) 357 if (bytes != 0)
348 SetError("Data and source mismatch on length"); 358 SetError("Data and source mismatch on length");
349 file_util::CloseFile(test_file_); 359 file_util::CloseFile(test_file_);
350 } 360 }
351 break; 361 break;
352 default: 362 default:
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 tests_in_progress_--; 417 tests_in_progress_--;
408 break; 418 break;
409 case BOGUS_URL_STREAM_ID: 419 case BOGUS_URL_STREAM_ID:
410 if (reason != NPRES_NETWORK_ERR) { 420 if (reason != NPRES_NETWORK_ERR) {
411 std::string err = "BOGUS_URL received unexpected URLNotify status: "; 421 std::string err = "BOGUS_URL received unexpected URLNotify status: ";
412 err.append(base::IntToString(reason)); 422 err.append(base::IntToString(reason));
413 SetError(err); 423 SetError(err);
414 } 424 }
415 tests_in_progress_--; 425 tests_in_progress_--;
416 break; 426 break;
417 case REDIRECT_SRC_URL_NOTIFICATION_ID: { 427 case REDIRECT_SRC_URL_NOTIFICATION_CANCEL_ID: {
418 if (!received_url_redirect_notification_) { 428 if (!received_url_redirect_cancel_notification_) {
419 SetError("Failed to receive URLRedirect notification"); 429 SetError("Failed to receive URLRedirect notification for cancel");
430 }
431 if (reason != NPRES_NETWORK_ERR) {
432 SetError("Redirected URL didn't get canceled");
433 }
434 break;
435 }
436 case REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID: {
437 if (!received_url_redirect_allow_notification_) {
438 SetError("Failed to receive URLRedirect notification for allow");
439 }
440 if (reason != NPRES_DONE) {
441 SetError("Redirected URL didn't complete successfully");
420 } 442 }
421 tests_in_progress_--; 443 tests_in_progress_--;
422 break; 444 break;
423 } 445 }
424 default: 446 default:
425 SetError("Unexpected NewStream callback"); 447 SetError("Unexpected NewStream callback");
426 break; 448 break;
427 } 449 }
428 450
429 if (tests_in_progress_ == 0) 451 if (tests_in_progress_ == 0)
430 SignalTestCompleted(); 452 SignalTestCompleted();
431 } 453 }
432 454
433 void PluginGetURLTest::URLRedirectNotify(const char* url, 455 void PluginGetURLTest::URLRedirectNotify(const char* url,
434 int32_t status, 456 int32_t status,
435 void* notify_data) { 457 void* notify_data) {
436 if (!base::strcasecmp(url, "http://mock.http/npapi/plugin_read_page.html")) { 458 unsigned long stream_id = reinterpret_cast<unsigned long>(notify_data);
437 received_url_redirect_notification_ = true; 459 if (stream_id == REDIRECT_SRC_URL_NOTIFICATION_CANCEL_ID) {
438 // Disallow redirect notification. 460 if (!base::strcasecmp(url,
439 HostFunctions()->urlredirectresponse(id(), notify_data, false); 461 "http://mock.http/npapi/plugin_read_page.html")) {
462 received_url_redirect_cancel_notification_ = true;
463 // Disallow redirect notification.
464 HostFunctions()->urlredirectresponse(id(), notify_data, false);
465
466 // Now start a request that we will allow to redirect.
467 HostFunctions()->geturlnotify(
468 id(), REDIRECT_SRC_URL, NULL,
469 reinterpret_cast<void*>(REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID));
470 }
471 } else if (stream_id == REDIRECT_SRC_URL_NOTIFICATION_ALLOW_ID) {
472 received_url_redirect_allow_notification_ = true;
473 HostFunctions()->urlredirectresponse(id(), notify_data, true);
440 } 474 }
441 } 475 }
442 476
443 } // namespace NPAPIClient 477 } // namespace NPAPIClient
OLDNEW
« no previous file with comments | « content/test/plugin/plugin_geturl_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698