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

Side by Side Diff: chrome/browser/shell_integration_linux_unittest.cc

Issue 253403002: Linux: The App Launcher now appears on the "Internet" menu, not "Other". (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use a global array, instead of a global pointer to a string. Created 6 years, 8 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/browser/shell_integration_linux.cc ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/browser/shell_integration_linux.h" 5 #include "chrome/browser/shell_integration_linux.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstdlib> 8 #include <cstdlib>
9 #include <map> 9 #include <map>
10 10
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 " while testing " << test_cases[i].url; 439 " while testing " << test_cases[i].url;
440 } 440 }
441 } 441 }
442 442
443 TEST(ShellIntegrationTest, GetDesktopFileContents) { 443 TEST(ShellIntegrationTest, GetDesktopFileContents) {
444 const base::FilePath kChromeExePath("/opt/google/chrome/google-chrome"); 444 const base::FilePath kChromeExePath("/opt/google/chrome/google-chrome");
445 const struct { 445 const struct {
446 const char* url; 446 const char* url;
447 const char* title; 447 const char* title;
448 const char* icon_name; 448 const char* icon_name;
449 const char* categories;
449 bool nodisplay; 450 bool nodisplay;
450 const char* expected_output; 451 const char* expected_output;
451 } test_cases[] = { 452 } test_cases[] = {
452 // Real-world case. 453 // Real-world case.
453 { "http://gmail.com", 454 { "http://gmail.com",
454 "GMail", 455 "GMail",
455 "chrome-http__gmail.com", 456 "chrome-http__gmail.com",
457 "",
456 false, 458 false,
457 459
458 "#!/usr/bin/env xdg-open\n" 460 "#!/usr/bin/env xdg-open\n"
459 "[Desktop Entry]\n" 461 "[Desktop Entry]\n"
460 "Version=1.0\n" 462 "Version=1.0\n"
461 "Terminal=false\n" 463 "Terminal=false\n"
462 "Type=Application\n" 464 "Type=Application\n"
463 "Name=GMail\n" 465 "Name=GMail\n"
464 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n" 466 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n"
465 "Icon=chrome-http__gmail.com\n" 467 "Icon=chrome-http__gmail.com\n"
466 "StartupWMClass=gmail.com\n" 468 "StartupWMClass=gmail.com\n"
467 }, 469 },
468 470
469 // Make sure that empty icons are replaced by the chrome icon. 471 // Make sure that empty icons are replaced by the chrome icon.
470 { "http://gmail.com", 472 { "http://gmail.com",
471 "GMail", 473 "GMail",
472 "", 474 "",
475 "",
473 false, 476 false,
474 477
475 "#!/usr/bin/env xdg-open\n" 478 "#!/usr/bin/env xdg-open\n"
476 "[Desktop Entry]\n" 479 "[Desktop Entry]\n"
477 "Version=1.0\n" 480 "Version=1.0\n"
478 "Terminal=false\n" 481 "Terminal=false\n"
479 "Type=Application\n" 482 "Type=Application\n"
480 "Name=GMail\n" 483 "Name=GMail\n"
481 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n" 484 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n"
482 #if defined(GOOGLE_CHROME_BUILD) 485 #if defined(GOOGLE_CHROME_BUILD)
483 "Icon=google-chrome\n" 486 "Icon=google-chrome\n"
484 #else 487 #else
485 "Icon=chromium-browser\n" 488 "Icon=chromium-browser\n"
486 #endif 489 #endif
487 "StartupWMClass=gmail.com\n" 490 "StartupWMClass=gmail.com\n"
488 }, 491 },
489 492
490 // Test adding NoDisplay=true. 493 // Test adding categories and NoDisplay=true.
491 { "http://gmail.com", 494 { "http://gmail.com",
492 "GMail", 495 "GMail",
493 "chrome-http__gmail.com", 496 "chrome-http__gmail.com",
497 "Graphics;Education;",
494 true, 498 true,
495 499
496 "#!/usr/bin/env xdg-open\n" 500 "#!/usr/bin/env xdg-open\n"
497 "[Desktop Entry]\n" 501 "[Desktop Entry]\n"
498 "Version=1.0\n" 502 "Version=1.0\n"
499 "Terminal=false\n" 503 "Terminal=false\n"
500 "Type=Application\n" 504 "Type=Application\n"
501 "Name=GMail\n" 505 "Name=GMail\n"
502 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n" 506 "Exec=/opt/google/chrome/google-chrome --app=http://gmail.com/\n"
503 "Icon=chrome-http__gmail.com\n" 507 "Icon=chrome-http__gmail.com\n"
508 "Categories=Graphics;Education;\n"
504 "NoDisplay=true\n" 509 "NoDisplay=true\n"
505 "StartupWMClass=gmail.com\n" 510 "StartupWMClass=gmail.com\n"
506 }, 511 },
507 512
508 // Now we're starting to be more evil... 513 // Now we're starting to be more evil...
509 { "http://evil.com/evil --join-the-b0tnet", 514 { "http://evil.com/evil --join-the-b0tnet",
510 "Ownz0red\nExec=rm -rf /", 515 "Ownz0red\nExec=rm -rf /",
511 "chrome-http__evil.com_evil", 516 "chrome-http__evil.com_evil",
517 "",
512 false, 518 false,
513 519
514 "#!/usr/bin/env xdg-open\n" 520 "#!/usr/bin/env xdg-open\n"
515 "[Desktop Entry]\n" 521 "[Desktop Entry]\n"
516 "Version=1.0\n" 522 "Version=1.0\n"
517 "Terminal=false\n" 523 "Terminal=false\n"
518 "Type=Application\n" 524 "Type=Application\n"
519 "Name=http://evil.com/evil%20--join-the-b0tnet\n" 525 "Name=http://evil.com/evil%20--join-the-b0tnet\n"
520 "Exec=/opt/google/chrome/google-chrome " 526 "Exec=/opt/google/chrome/google-chrome "
521 "--app=http://evil.com/evil%20--join-the-b0tnet\n" 527 "--app=http://evil.com/evil%20--join-the-b0tnet\n"
522 "Icon=chrome-http__evil.com_evil\n" 528 "Icon=chrome-http__evil.com_evil\n"
523 "StartupWMClass=evil.com__evil%20--join-the-b0tnet\n" 529 "StartupWMClass=evil.com__evil%20--join-the-b0tnet\n"
524 }, 530 },
525 { "http://evil.com/evil; rm -rf /; \"; rm -rf $HOME >ownz0red", 531 { "http://evil.com/evil; rm -rf /; \"; rm -rf $HOME >ownz0red",
526 "Innocent Title", 532 "Innocent Title",
527 "chrome-http__evil.com_evil", 533 "chrome-http__evil.com_evil",
534 "",
528 false, 535 false,
529 536
530 "#!/usr/bin/env xdg-open\n" 537 "#!/usr/bin/env xdg-open\n"
531 "[Desktop Entry]\n" 538 "[Desktop Entry]\n"
532 "Version=1.0\n" 539 "Version=1.0\n"
533 "Terminal=false\n" 540 "Terminal=false\n"
534 "Type=Application\n" 541 "Type=Application\n"
535 "Name=Innocent Title\n" 542 "Name=Innocent Title\n"
536 "Exec=/opt/google/chrome/google-chrome " 543 "Exec=/opt/google/chrome/google-chrome "
537 "\"--app=http://evil.com/evil;%20rm%20-rf%20/;%20%22;%20rm%20" 544 "\"--app=http://evil.com/evil;%20rm%20-rf%20/;%20%22;%20rm%20"
538 // Note: $ is escaped as \$ within an arg to Exec, and then 545 // Note: $ is escaped as \$ within an arg to Exec, and then
539 // the \ is escaped as \\ as all strings in a Desktop file should 546 // the \ is escaped as \\ as all strings in a Desktop file should
540 // be; finally, \\ becomes \\\\ when represented in a C++ string! 547 // be; finally, \\ becomes \\\\ when represented in a C++ string!
541 "-rf%20\\\\$HOME%20%3Eownz0red\"\n" 548 "-rf%20\\\\$HOME%20%3Eownz0red\"\n"
542 "Icon=chrome-http__evil.com_evil\n" 549 "Icon=chrome-http__evil.com_evil\n"
543 "StartupWMClass=evil.com__evil;%20rm%20-rf%20_;%20%22;%20" 550 "StartupWMClass=evil.com__evil;%20rm%20-rf%20_;%20%22;%20"
544 "rm%20-rf%20$HOME%20%3Eownz0red\n" 551 "rm%20-rf%20$HOME%20%3Eownz0red\n"
545 }, 552 },
546 { "http://evil.com/evil | cat `echo ownz0red` >/dev/null", 553 { "http://evil.com/evil | cat `echo ownz0red` >/dev/null",
547 "Innocent Title", 554 "Innocent Title",
548 "chrome-http__evil.com_evil", 555 "chrome-http__evil.com_evil",
556 "",
549 false, 557 false,
550 558
551 "#!/usr/bin/env xdg-open\n" 559 "#!/usr/bin/env xdg-open\n"
552 "[Desktop Entry]\n" 560 "[Desktop Entry]\n"
553 "Version=1.0\n" 561 "Version=1.0\n"
554 "Terminal=false\n" 562 "Terminal=false\n"
555 "Type=Application\n" 563 "Type=Application\n"
556 "Name=Innocent Title\n" 564 "Name=Innocent Title\n"
557 "Exec=/opt/google/chrome/google-chrome " 565 "Exec=/opt/google/chrome/google-chrome "
558 "--app=http://evil.com/evil%20%7C%20cat%20%60echo%20ownz0red" 566 "--app=http://evil.com/evil%20%7C%20cat%20%60echo%20ownz0red"
559 "%60%20%3E/dev/null\n" 567 "%60%20%3E/dev/null\n"
560 "Icon=chrome-http__evil.com_evil\n" 568 "Icon=chrome-http__evil.com_evil\n"
561 "StartupWMClass=evil.com__evil%20%7C%20cat%20%60echo%20ownz0red" 569 "StartupWMClass=evil.com__evil%20%7C%20cat%20%60echo%20ownz0red"
562 "%60%20%3E_dev_null\n" 570 "%60%20%3E_dev_null\n"
563 }, 571 },
564 }; 572 };
565 573
566 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); i++) { 574 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); i++) {
567 SCOPED_TRACE(i); 575 SCOPED_TRACE(i);
568 EXPECT_EQ( 576 EXPECT_EQ(
569 test_cases[i].expected_output, 577 test_cases[i].expected_output,
570 ShellIntegrationLinux::GetDesktopFileContents( 578 ShellIntegrationLinux::GetDesktopFileContents(
571 kChromeExePath, 579 kChromeExePath,
572 web_app::GenerateApplicationNameFromURL(GURL(test_cases[i].url)), 580 web_app::GenerateApplicationNameFromURL(GURL(test_cases[i].url)),
573 GURL(test_cases[i].url), 581 GURL(test_cases[i].url),
574 std::string(), 582 std::string(),
575 base::ASCIIToUTF16(test_cases[i].title), 583 base::ASCIIToUTF16(test_cases[i].title),
576 test_cases[i].icon_name, 584 test_cases[i].icon_name,
577 base::FilePath(), 585 base::FilePath(),
586 test_cases[i].categories,
578 test_cases[i].nodisplay)); 587 test_cases[i].nodisplay));
579 } 588 }
580 } 589 }
581 590
582 TEST(ShellIntegrationTest, GetDesktopFileContentsAppList) { 591 TEST(ShellIntegrationTest, GetDesktopFileContentsAppList) {
583 const base::FilePath kChromeExePath("/opt/google/chrome/google-chrome"); 592 const base::FilePath kChromeExePath("/opt/google/chrome/google-chrome");
584 CommandLine command_line(kChromeExePath); 593 CommandLine command_line(kChromeExePath);
585 command_line.AppendSwitch("--show-app-list"); 594 command_line.AppendSwitch("--show-app-list");
586 EXPECT_EQ( 595 EXPECT_EQ(
587 "#!/usr/bin/env xdg-open\n" 596 "#!/usr/bin/env xdg-open\n"
588 "[Desktop Entry]\n" 597 "[Desktop Entry]\n"
589 "Version=1.0\n" 598 "Version=1.0\n"
590 "Terminal=false\n" 599 "Terminal=false\n"
591 "Type=Application\n" 600 "Type=Application\n"
592 "Name=Chrome App Launcher\n" 601 "Name=Chrome App Launcher\n"
593 "Exec=/opt/google/chrome/google-chrome --show-app-list\n" 602 "Exec=/opt/google/chrome/google-chrome --show-app-list\n"
594 "Icon=chrome_app_list\n" 603 "Icon=chrome_app_list\n"
604 "Categories=Network;WebBrowser;\n"
595 "StartupWMClass=chrome-app-list\n", 605 "StartupWMClass=chrome-app-list\n",
596 ShellIntegrationLinux::GetDesktopFileContentsForCommand( 606 ShellIntegrationLinux::GetDesktopFileContentsForCommand(
597 command_line, 607 command_line,
598 "chrome-app-list", 608 "chrome-app-list",
599 GURL(), 609 GURL(),
600 base::ASCIIToUTF16("Chrome App Launcher"), 610 base::ASCIIToUTF16("Chrome App Launcher"),
601 "chrome_app_list", 611 "chrome_app_list",
612 "Network;WebBrowser;",
602 false)); 613 false));
603 } 614 }
604 615
605 TEST(ShellIntegrationTest, GetDirectoryFileContents) { 616 TEST(ShellIntegrationTest, GetDirectoryFileContents) {
606 const struct { 617 const struct {
607 const char* title; 618 const char* title;
608 const char* icon_name; 619 const char* icon_name;
609 const char* expected_output; 620 const char* expected_output;
610 } test_cases[] = { 621 } test_cases[] = {
611 // Real-world case. 622 // Real-world case.
(...skipping 25 matching lines...) Expand all
637 648
638 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); i++) { 649 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); i++) {
639 SCOPED_TRACE(i); 650 SCOPED_TRACE(i);
640 EXPECT_EQ( 651 EXPECT_EQ(
641 test_cases[i].expected_output, 652 test_cases[i].expected_output,
642 ShellIntegrationLinux::GetDirectoryFileContents( 653 ShellIntegrationLinux::GetDirectoryFileContents(
643 base::ASCIIToUTF16(test_cases[i].title), 654 base::ASCIIToUTF16(test_cases[i].title),
644 test_cases[i].icon_name)); 655 test_cases[i].icon_name));
645 } 656 }
646 } 657 }
OLDNEW
« no previous file with comments | « chrome/browser/shell_integration_linux.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698