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