OLD | NEW |
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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 { ASCIIToUTF16("?foo bar"), AutocompleteInput::FORCED_QUERY }, | 284 { ASCIIToUTF16("?foo bar"), AutocompleteInput::FORCED_QUERY }, |
285 { ASCIIToUTF16("?http://foo.com/bar"), AutocompleteInput::FORCED_QUERY }, | 285 { ASCIIToUTF16("?http://foo.com/bar"), AutocompleteInput::FORCED_QUERY }, |
286 { ASCIIToUTF16("foo"), AutocompleteInput::UNKNOWN }, | 286 { ASCIIToUTF16("foo"), AutocompleteInput::UNKNOWN }, |
287 { ASCIIToUTF16("localhost"), AutocompleteInput::URL }, | 287 { ASCIIToUTF16("localhost"), AutocompleteInput::URL }, |
288 { ASCIIToUTF16("foo.c"), AutocompleteInput::UNKNOWN }, | 288 { ASCIIToUTF16("foo.c"), AutocompleteInput::UNKNOWN }, |
289 { ASCIIToUTF16("foo.com"), AutocompleteInput::URL }, | 289 { ASCIIToUTF16("foo.com"), AutocompleteInput::URL }, |
290 { ASCIIToUTF16("-foo.com"), AutocompleteInput::URL }, | 290 { ASCIIToUTF16("-foo.com"), AutocompleteInput::URL }, |
291 { ASCIIToUTF16("foo-.com"), AutocompleteInput::UNKNOWN }, | 291 { ASCIIToUTF16("foo-.com"), AutocompleteInput::UNKNOWN }, |
292 { ASCIIToUTF16("foo.-com"), AutocompleteInput::QUERY }, | 292 { ASCIIToUTF16("foo.-com"), AutocompleteInput::QUERY }, |
293 { ASCIIToUTF16("foo/bar"), AutocompleteInput::UNKNOWN }, | 293 { ASCIIToUTF16("foo/bar"), AutocompleteInput::UNKNOWN }, |
| 294 { ASCIIToUTF16("foo.com/bar"), AutocompleteInput::URL }, |
294 { ASCIIToUTF16("foo;bar"), AutocompleteInput::QUERY }, | 295 { ASCIIToUTF16("foo;bar"), AutocompleteInput::QUERY }, |
295 { ASCIIToUTF16("foo/bar baz"), AutocompleteInput::UNKNOWN }, | 296 { ASCIIToUTF16("foo/bar baz"), AutocompleteInput::UNKNOWN }, |
296 { ASCIIToUTF16("foo bar.com"), AutocompleteInput::QUERY }, | 297 { ASCIIToUTF16("foo bar.com"), AutocompleteInput::QUERY }, |
297 { ASCIIToUTF16("foo bar"), AutocompleteInput::QUERY }, | 298 { ASCIIToUTF16("foo bar"), AutocompleteInput::QUERY }, |
298 { ASCIIToUTF16("foo+bar"), AutocompleteInput::QUERY }, | 299 { ASCIIToUTF16("foo+bar"), AutocompleteInput::QUERY }, |
299 { ASCIIToUTF16("foo+bar.com"), AutocompleteInput::UNKNOWN }, | 300 { ASCIIToUTF16("foo+bar.com"), AutocompleteInput::UNKNOWN }, |
300 { ASCIIToUTF16("\"foo:bar\""), AutocompleteInput::QUERY }, | 301 { ASCIIToUTF16("\"foo:bar\""), AutocompleteInput::QUERY }, |
301 { ASCIIToUTF16("link:foo.com"), AutocompleteInput::UNKNOWN }, | 302 { ASCIIToUTF16("link:foo.com"), AutocompleteInput::UNKNOWN }, |
302 { ASCIIToUTF16("foo:81"), AutocompleteInput::UNKNOWN }, | 303 { ASCIIToUTF16("foo:81"), AutocompleteInput::UNKNOWN }, |
303 { ASCIIToUTF16("localhost:8080"), AutocompleteInput::URL }, | 304 { ASCIIToUTF16("localhost:8080"), AutocompleteInput::URL }, |
304 { ASCIIToUTF16("www.foo.com:81"), AutocompleteInput::URL }, | 305 { ASCIIToUTF16("www.foo.com:81"), AutocompleteInput::URL }, |
305 { ASCIIToUTF16("foo.com:123456"), AutocompleteInput::QUERY }, | 306 { ASCIIToUTF16("foo.com:123456"), AutocompleteInput::QUERY }, |
306 { ASCIIToUTF16("foo.com:abc"), AutocompleteInput::QUERY }, | 307 { ASCIIToUTF16("foo.com:abc"), AutocompleteInput::QUERY }, |
307 { ASCIIToUTF16("1.2.3.4:abc"), AutocompleteInput::QUERY }, | 308 { ASCIIToUTF16("1.2.3.4:abc"), AutocompleteInput::QUERY }, |
308 { ASCIIToUTF16("user@foo.com"), AutocompleteInput::UNKNOWN }, | 309 { ASCIIToUTF16("user@foo.com"), AutocompleteInput::UNKNOWN }, |
309 { ASCIIToUTF16("user@foo/z"), AutocompleteInput::UNKNOWN }, | 310 { ASCIIToUTF16("user@foo/z"), AutocompleteInput::URL }, |
310 { ASCIIToUTF16("user@foo/z z"), AutocompleteInput::UNKNOWN }, | 311 { ASCIIToUTF16("user@foo/z z"), AutocompleteInput::URL }, |
311 { ASCIIToUTF16("user@foo.com/z"), AutocompleteInput::URL }, | 312 { ASCIIToUTF16("user@foo.com/z"), AutocompleteInput::URL }, |
312 { ASCIIToUTF16("user:pass@"), AutocompleteInput::UNKNOWN }, | 313 { ASCIIToUTF16("user:pass@"), AutocompleteInput::UNKNOWN }, |
313 { ASCIIToUTF16("user:pass@!foo.com"), AutocompleteInput::UNKNOWN }, | 314 { ASCIIToUTF16("user:pass@!foo.com"), AutocompleteInput::UNKNOWN }, |
314 { ASCIIToUTF16("user:pass@foo"), AutocompleteInput::URL }, | 315 { ASCIIToUTF16("user:pass@foo"), AutocompleteInput::URL }, |
315 { ASCIIToUTF16("user:pass@foo.c"), AutocompleteInput::URL }, | 316 { ASCIIToUTF16("user:pass@foo.c"), AutocompleteInput::URL }, |
316 { ASCIIToUTF16("user:pass@foo.com"), AutocompleteInput::URL }, | 317 { ASCIIToUTF16("user:pass@foo.com"), AutocompleteInput::URL }, |
317 { ASCIIToUTF16("user:pass@foo.com:81"), AutocompleteInput::URL }, | 318 { ASCIIToUTF16("user:pass@foo.com:81"), AutocompleteInput::URL }, |
318 { ASCIIToUTF16("user:pass@foo:81"), AutocompleteInput::URL }, | 319 { ASCIIToUTF16("user:pass@foo:81"), AutocompleteInput::URL }, |
319 { ASCIIToUTF16("1.2"), AutocompleteInput::UNKNOWN }, | 320 { ASCIIToUTF16("1.2"), AutocompleteInput::UNKNOWN }, |
320 { ASCIIToUTF16("1.2/45"), AutocompleteInput::UNKNOWN }, | 321 { ASCIIToUTF16("1.2/45"), AutocompleteInput::UNKNOWN }, |
321 { ASCIIToUTF16("1.2:45"), AutocompleteInput::UNKNOWN }, | 322 { ASCIIToUTF16("1.2:45"), AutocompleteInput::UNKNOWN }, |
322 { ASCIIToUTF16("user@1.2:45"), AutocompleteInput::UNKNOWN }, | 323 { ASCIIToUTF16("user@1.2:45"), AutocompleteInput::URL }, |
323 { ASCIIToUTF16("user@foo:45"), AutocompleteInput::UNKNOWN }, | 324 { ASCIIToUTF16("user@foo:45"), AutocompleteInput::URL }, |
324 { ASCIIToUTF16("user:pass@1.2:45"), AutocompleteInput::URL }, | 325 { ASCIIToUTF16("user:pass@1.2:45"), AutocompleteInput::URL }, |
| 326 { ASCIIToUTF16("host?query"), AutocompleteInput::UNKNOWN }, |
| 327 { ASCIIToUTF16("host#ref"), AutocompleteInput::UNKNOWN }, |
| 328 { ASCIIToUTF16("host/path?query"), AutocompleteInput::URL }, |
| 329 { ASCIIToUTF16("host/path#ref"), AutocompleteInput::URL }, |
325 { ASCIIToUTF16("en.wikipedia.org/wiki/James Bond"), | 330 { ASCIIToUTF16("en.wikipedia.org/wiki/James Bond"), |
326 AutocompleteInput::URL }, | 331 AutocompleteInput::URL }, |
327 // In Chrome itself, mailto: will get handled by ShellExecute, but in | 332 // In Chrome itself, mailto: will get handled by ShellExecute, but in |
328 // unittest mode, we don't have the data loaded in the external protocol | 333 // unittest mode, we don't have the data loaded in the external protocol |
329 // handler to know this. | 334 // handler to know this. |
330 // { ASCIIToUTF16("mailto:abuse@foo.com"), AutocompleteInput::URL }, | 335 // { ASCIIToUTF16("mailto:abuse@foo.com"), AutocompleteInput::URL }, |
331 { ASCIIToUTF16("view-source:http://www.foo.com/"), AutocompleteInput::URL }, | 336 { ASCIIToUTF16("view-source:http://www.foo.com/"), AutocompleteInput::URL }, |
332 { ASCIIToUTF16("javascript:alert(\"Hey there!\");"), | 337 { ASCIIToUTF16("javascript:alert(\"Hey there!\");"), |
333 AutocompleteInput::URL }, | 338 AutocompleteInput::URL }, |
334 #if defined(OS_WIN) | 339 #if defined(OS_WIN) |
(...skipping 16 matching lines...) Expand all Loading... |
351 { ASCIIToUTF16("http:user@foo.com"), AutocompleteInput::URL }, | 356 { ASCIIToUTF16("http:user@foo.com"), AutocompleteInput::URL }, |
352 { ASCIIToUTF16("http://user@foo.com"), AutocompleteInput::URL }, | 357 { ASCIIToUTF16("http://user@foo.com"), AutocompleteInput::URL }, |
353 { ASCIIToUTF16("http:user:pass@foo.com"), AutocompleteInput::URL }, | 358 { ASCIIToUTF16("http:user:pass@foo.com"), AutocompleteInput::URL }, |
354 { ASCIIToUTF16("http://user:pass@foo.com"), AutocompleteInput::URL }, | 359 { ASCIIToUTF16("http://user:pass@foo.com"), AutocompleteInput::URL }, |
355 { ASCIIToUTF16("http://1.2"), AutocompleteInput::URL }, | 360 { ASCIIToUTF16("http://1.2"), AutocompleteInput::URL }, |
356 { ASCIIToUTF16("http://1.2/45"), AutocompleteInput::URL }, | 361 { ASCIIToUTF16("http://1.2/45"), AutocompleteInput::URL }, |
357 { ASCIIToUTF16("http:ps/2 games"), AutocompleteInput::URL }, | 362 { ASCIIToUTF16("http:ps/2 games"), AutocompleteInput::URL }, |
358 { ASCIIToUTF16("https://foo.com"), AutocompleteInput::URL }, | 363 { ASCIIToUTF16("https://foo.com"), AutocompleteInput::URL }, |
359 { ASCIIToUTF16("127.0.0.1"), AutocompleteInput::URL }, | 364 { ASCIIToUTF16("127.0.0.1"), AutocompleteInput::URL }, |
360 { ASCIIToUTF16("127.0.1"), AutocompleteInput::UNKNOWN }, | 365 { ASCIIToUTF16("127.0.1"), AutocompleteInput::UNKNOWN }, |
361 { ASCIIToUTF16("127.0.1/"), AutocompleteInput::UNKNOWN }, | 366 { ASCIIToUTF16("127.0.1/"), AutocompleteInput::URL }, |
362 { ASCIIToUTF16("browser.tabs.closeButtons"), AutocompleteInput::UNKNOWN }, | 367 { ASCIIToUTF16("browser.tabs.closeButtons"), AutocompleteInput::UNKNOWN }, |
363 { WideToUTF16(L"\u6d4b\u8bd5"), AutocompleteInput::UNKNOWN }, | 368 { WideToUTF16(L"\u6d4b\u8bd5"), AutocompleteInput::UNKNOWN }, |
364 { ASCIIToUTF16("[2001:]"), AutocompleteInput::QUERY }, // Not a valid IP | 369 { ASCIIToUTF16("[2001:]"), AutocompleteInput::QUERY }, // Not a valid IP |
365 { ASCIIToUTF16("[2001:dB8::1]"), AutocompleteInput::URL }, | 370 { ASCIIToUTF16("[2001:dB8::1]"), AutocompleteInput::URL }, |
366 { ASCIIToUTF16("192.168.0.256"), | 371 { ASCIIToUTF16("192.168.0.256"), |
367 AutocompleteInput::QUERY }, // Invalid IPv4 literal. | 372 AutocompleteInput::QUERY }, // Invalid IPv4 literal. |
368 { ASCIIToUTF16("[foo.com]"), | 373 { ASCIIToUTF16("[foo.com]"), |
369 AutocompleteInput::QUERY }, // Invalid IPv6 literal. | 374 AutocompleteInput::QUERY }, // Invalid IPv6 literal. |
370 }; | 375 }; |
371 | 376 |
372 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { | 377 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { |
373 SCOPED_TRACE(input_cases[i].input); | 378 SCOPED_TRACE(input_cases[i].input); |
374 AutocompleteInput input(input_cases[i].input, string16(), true, false, | 379 AutocompleteInput input(input_cases[i].input, string16(), true, false, |
375 true, AutocompleteInput::ALL_MATCHES); | 380 true, AutocompleteInput::ALL_MATCHES); |
376 EXPECT_EQ(input_cases[i].type, input.type()); | 381 EXPECT_EQ(input_cases[i].type, input.type()); |
377 } | 382 } |
378 } | 383 } |
379 | 384 |
380 TEST_F(AutocompleteTest, InputTypeWithDesiredTLD) { | 385 TEST_F(AutocompleteTest, InputTypeWithDesiredTLD) { |
381 struct test_data { | 386 struct test_data { |
382 const string16 input; | 387 const string16 input; |
383 const AutocompleteInput::Type type; | 388 const AutocompleteInput::Type type; |
384 } input_cases[] = { | 389 } input_cases[] = { |
385 { ASCIIToUTF16("401k"), AutocompleteInput::REQUESTED_URL }, | 390 { ASCIIToUTF16("401k"), AutocompleteInput::REQUESTED_URL }, |
386 { ASCIIToUTF16("999999999999999"), AutocompleteInput::REQUESTED_URL }, | 391 { ASCIIToUTF16("999999999999999"), AutocompleteInput::REQUESTED_URL }, |
387 { ASCIIToUTF16("x@y/z z"), AutocompleteInput::REQUESTED_URL }, | 392 { ASCIIToUTF16("x@y"), AutocompleteInput::REQUESTED_URL }, |
| 393 { ASCIIToUTF16("y/z z"), AutocompleteInput::REQUESTED_URL }, |
388 }; | 394 }; |
389 | 395 |
390 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { | 396 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { |
| 397 SCOPED_TRACE(input_cases[i].input); |
391 AutocompleteInput input(input_cases[i].input, ASCIIToUTF16("com"), true, | 398 AutocompleteInput input(input_cases[i].input, ASCIIToUTF16("com"), true, |
392 false, true, AutocompleteInput::ALL_MATCHES); | 399 false, true, AutocompleteInput::ALL_MATCHES); |
393 EXPECT_EQ(input_cases[i].type, input.type()) << "Input: " << | 400 EXPECT_EQ(input_cases[i].type, input.type()); |
394 input_cases[i].input; | |
395 } | 401 } |
396 } | 402 } |
397 | 403 |
398 // This tests for a regression where certain input in the omnibox caused us to | 404 // This tests for a regression where certain input in the omnibox caused us to |
399 // crash. As long as the test completes without crashing, we're fine. | 405 // crash. As long as the test completes without crashing, we're fine. |
400 TEST_F(AutocompleteTest, InputCrash) { | 406 TEST_F(AutocompleteTest, InputCrash) { |
401 AutocompleteInput input(WideToUTF16(L"\uff65@s"), string16(), true, false, | 407 AutocompleteInput input(WideToUTF16(L"\uff65@s"), string16(), true, false, |
402 true, AutocompleteInput::ALL_MATCHES); | 408 true, AutocompleteInput::ALL_MATCHES); |
403 } | 409 } |
404 | 410 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 { ASCIIToUTF16("view-source:"), Component(0, 11), kInvalidComponent }, | 462 { ASCIIToUTF16("view-source:"), Component(0, 11), kInvalidComponent }, |
457 { ASCIIToUTF16("view-source:garbage"), kInvalidComponent, | 463 { ASCIIToUTF16("view-source:garbage"), kInvalidComponent, |
458 Component(12, 7) }, | 464 Component(12, 7) }, |
459 { ASCIIToUTF16("view-source:http://http://foo"), Component(12, 4), | 465 { ASCIIToUTF16("view-source:http://http://foo"), Component(12, 4), |
460 Component(19, 4) }, | 466 Component(19, 4) }, |
461 { ASCIIToUTF16("view-source:view-source:http://example.com/"), | 467 { ASCIIToUTF16("view-source:view-source:http://example.com/"), |
462 Component(12, 11), kInvalidComponent } | 468 Component(12, 11), kInvalidComponent } |
463 }; | 469 }; |
464 | 470 |
465 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { | 471 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(input_cases); ++i) { |
| 472 SCOPED_TRACE(input_cases[i].input); |
466 Component scheme, host; | 473 Component scheme, host; |
467 AutocompleteInput::ParseForEmphasizeComponents(input_cases[i].input, | 474 AutocompleteInput::ParseForEmphasizeComponents(input_cases[i].input, |
468 string16(), | 475 string16(), |
469 &scheme, | 476 &scheme, |
470 &host); | 477 &host); |
471 AutocompleteInput input(input_cases[i].input, string16(), true, false, | 478 AutocompleteInput input(input_cases[i].input, string16(), true, false, |
472 true, AutocompleteInput::ALL_MATCHES); | 479 true, AutocompleteInput::ALL_MATCHES); |
473 EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin) << "Input: " << | 480 EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin); |
474 input_cases[i].input; | 481 EXPECT_EQ(input_cases[i].scheme.len, scheme.len); |
475 EXPECT_EQ(input_cases[i].scheme.len, scheme.len) << "Input: " << | 482 EXPECT_EQ(input_cases[i].host.begin, host.begin); |
476 input_cases[i].input; | 483 EXPECT_EQ(input_cases[i].host.len, host.len); |
477 EXPECT_EQ(input_cases[i].host.begin, host.begin) << "Input: " << | |
478 input_cases[i].input; | |
479 EXPECT_EQ(input_cases[i].host.len, host.len) << "Input: " << | |
480 input_cases[i].input; | |
481 } | 484 } |
482 } | 485 } |
483 | 486 |
484 } // namespace | 487 } // namespace |
OLD | NEW |