OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 // to given path. Other parts of the url will be the same. | 585 // to given path. Other parts of the url will be the same. |
586 GURL ReplaceURLHostAndPath(const GURL& url, | 586 GURL ReplaceURLHostAndPath(const GURL& url, |
587 const std::string& host, | 587 const std::string& host, |
588 const std::string& path) { | 588 const std::string& path) { |
589 url::Replacements<char> replacements; | 589 url::Replacements<char> replacements; |
590 replacements.SetHost(host.c_str(), url::Component(0, host.length())); | 590 replacements.SetHost(host.c_str(), url::Component(0, host.length())); |
591 replacements.SetPath(path.c_str(), url::Component(0, path.length())); | 591 replacements.SetPath(path.c_str(), url::Component(0, path.length())); |
592 return url.ReplaceComponents(replacements); | 592 return url.ReplaceComponents(replacements); |
593 } | 593 } |
594 | 594 |
595 // Maps "foo://bar/baz/" to "foo://chrome/bar/baz/". | |
596 GURL AddUberHost(const GURL& url) { | |
597 const std::string uber_host = chrome::kChromeUIUberHost; | |
598 std::string new_path; | |
599 url.host_piece().AppendToString(&new_path); | |
600 url.path_piece().AppendToString(&new_path); | |
601 | |
602 return ReplaceURLHostAndPath(url, uber_host, new_path); | |
603 } | |
604 | |
605 // If url->host() is "chrome" and url->path() has characters other than the | |
606 // first slash, changes the url from "foo://chrome/bar/" to "foo://bar/" and | |
607 // returns true. Otherwise returns false. | |
608 bool RemoveUberHost(GURL* url) { | |
609 if (url->host() != chrome::kChromeUIUberHost) | |
610 return false; | |
611 | |
612 if (url->path().empty() || url->path() == "/") | |
613 return false; | |
614 | |
615 const std::string old_path = url->path(); | |
616 | |
617 const std::string::size_type separator = old_path.find('/', 1); | |
618 std::string new_host; | |
619 std::string new_path; | |
620 if (separator == std::string::npos) { | |
621 new_host = old_path.substr(1); | |
622 } else { | |
623 new_host = old_path.substr(1, separator - 1); | |
624 new_path = old_path.substr(separator); | |
625 } | |
626 | |
627 // Do not allow URLs with paths empty before the first slash since we can't | |
628 // have an empty host. (e.g "foo://chrome//") | |
629 if (new_host.empty()) | |
630 return false; | |
631 | |
632 *url = ReplaceURLHostAndPath(*url, new_host, new_path); | |
633 | |
634 DCHECK(url->is_valid()); | |
635 | |
636 return true; | |
637 } | |
638 | |
639 // Handles the rewriting of the new tab page URL based on group policy. | 595 // Handles the rewriting of the new tab page URL based on group policy. |
640 bool HandleNewTabPageLocationOverride( | 596 bool HandleNewTabPageLocationOverride( |
641 GURL* url, | 597 GURL* url, |
642 content::BrowserContext* browser_context) { | 598 content::BrowserContext* browser_context) { |
643 if (!url->SchemeIs(content::kChromeUIScheme) || | 599 if (!url->SchemeIs(content::kChromeUIScheme) || |
644 url->host() != chrome::kChromeUINewTabHost) | 600 url->host() != chrome::kChromeUINewTabHost) |
645 return false; | 601 return false; |
646 | 602 |
647 Profile* profile = Profile::FromBrowserContext(browser_context); | 603 Profile* profile = Profile::FromBrowserContext(browser_context); |
648 std::string ntp_location = | 604 std::string ntp_location = |
649 profile->GetPrefs()->GetString(prefs::kNewTabPageLocationOverride); | 605 profile->GetPrefs()->GetString(prefs::kNewTabPageLocationOverride); |
650 if (ntp_location.empty()) | 606 if (ntp_location.empty()) |
651 return false; | 607 return false; |
652 | 608 |
653 *url = GURL(ntp_location); | 609 *url = GURL(ntp_location); |
654 return true; | 610 return true; |
655 } | 611 } |
656 | 612 |
657 // Handles rewriting Web UI URLs. | 613 // Handles rewriting Web UI URLs. |
658 bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { | 614 bool HandleWebUI(GURL* url, content::BrowserContext* browser_context) { |
659 // Rewrite chrome://help and chrome://chrome to chrome://settings/help. | 615 // Rewrite chrome://help and chrome://chrome to chrome://settings/help. |
660 if (url->host() == chrome::kChromeUIHelpHost || | 616 if (url->host() == chrome::kChromeUIHelpHost || |
661 (url->host() == chrome::kChromeUIUberHost && | 617 (url->host() == chrome::kChromeUIUberHost && |
662 (url->path().empty() || url->path() == "/"))) { | 618 (url->path().empty() || url->path() == "/"))) { |
663 *url = ReplaceURLHostAndPath(*url, chrome::kChromeUISettingsHost, | 619 *url = ReplaceURLHostAndPath(*url, chrome::kChromeUISettingsHost, |
664 chrome::kChromeUIHelpHost); | 620 chrome::kChromeUIHelpHost); |
665 return true; // Return true to update the displayed URL. | 621 return true; // Return true to update the displayed URL. |
666 } | 622 } |
667 | 623 |
668 // Do not handle special URLs such as "about:foo" | 624 if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( |
669 if (!url->host().empty()) { | 625 browser_context, *url)) { |
670 const GURL chrome_url = AddUberHost(*url); | 626 return false; |
671 | |
672 // Handle valid "chrome://chrome/foo" URLs so the reverse handler will | |
673 // be called. | |
674 if (ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( | |
675 browser_context, chrome_url)) | |
676 return true; | |
677 } | 627 } |
678 | 628 |
679 if (!ChromeWebUIControllerFactory::GetInstance()->UseWebUIForURL( | |
680 browser_context, *url)) | |
681 return false; | |
682 | |
683 #if defined(OS_CHROMEOS) | 629 #if defined(OS_CHROMEOS) |
684 // Special case : in ChromeOS in Guest mode bookmarks and history are | 630 // Special case : in ChromeOS in Guest mode bookmarks and history are |
685 // disabled for security reasons. New tab page explains the reasons, so | 631 // disabled for security reasons. New tab page explains the reasons, so |
686 // we redirect user to new tab page. | 632 // we redirect user to new tab page. |
687 if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) { | 633 if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) { |
688 if (url->SchemeIs(content::kChromeUIScheme) && | 634 if (url->SchemeIs(content::kChromeUIScheme) && |
689 (url->DomainIs(chrome::kChromeUIBookmarksHost) || | 635 (url->DomainIs(chrome::kChromeUIBookmarksHost) || |
690 url->DomainIs(chrome::kChromeUIHistoryHost))) { | 636 url->DomainIs(chrome::kChromeUIHistoryHost))) { |
691 // Rewrite with new tab URL | 637 // Rewrite with new tab URL |
692 *url = GURL(chrome::kChromeUINewTabURL); | 638 *url = GURL(chrome::kChromeUINewTabURL); |
693 } | 639 } |
694 } | 640 } |
695 #endif | 641 #endif |
696 | 642 |
697 return true; | 643 return true; |
698 } | 644 } |
699 | 645 |
700 // Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to | 646 // Reverse URL handler for Web UI. Maps "chrome://chrome/foo/" to |
701 // "chrome://foo/". | 647 // "chrome://foo/". |
702 bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { | 648 bool HandleWebUIReverse(GURL* url, content::BrowserContext* browser_context) { |
703 // No need to actually reverse-rewrite the URL, but return true to update the | 649 // No need to actually reverse-rewrite the URL, but return true to update the |
704 // displayed URL when rewriting chrome://help to chrome://settings/help. | 650 // displayed URL when rewriting chrome://help to chrome://settings/help. |
705 if (url->host() == chrome::kChromeUISettingsHost) | 651 return url->host() == chrome::kChromeUISettingsHost; |
706 return true; | |
707 | |
708 if (!url->is_valid() || !url->SchemeIs(content::kChromeUIScheme)) | |
709 return false; | |
710 | |
711 return RemoveUberHost(url); | |
712 } | 652 } |
713 | 653 |
714 bool CertMatchesFilter(const net::X509Certificate& cert, | 654 bool CertMatchesFilter(const net::X509Certificate& cert, |
715 const base::DictionaryValue& filter) { | 655 const base::DictionaryValue& filter) { |
716 // TODO(markusheintz): This is the minimal required filter implementation. | 656 // TODO(markusheintz): This is the minimal required filter implementation. |
717 // Implement a better matcher. | 657 // Implement a better matcher. |
718 | 658 |
719 // An empty filter matches any client certificate since no requirements are | 659 // An empty filter matches any client certificate since no requirements are |
720 // specified at all. | 660 // specified at all. |
721 if (filter.empty()) | 661 if (filter.empty()) |
(...skipping 2782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3504 RedirectNonUINonIOBrowserThreadsToTaskScheduler() { | 3444 RedirectNonUINonIOBrowserThreadsToTaskScheduler() { |
3505 return variations::GetVariationParamValue( | 3445 return variations::GetVariationParamValue( |
3506 "BrowserScheduler", "RedirectNonUINonIOBrowserThreads") == "true"; | 3446 "BrowserScheduler", "RedirectNonUINonIOBrowserThreads") == "true"; |
3507 } | 3447 } |
3508 | 3448 |
3509 // static | 3449 // static |
3510 void ChromeContentBrowserClient::SetDefaultQuotaSettingsForTesting( | 3450 void ChromeContentBrowserClient::SetDefaultQuotaSettingsForTesting( |
3511 const storage::QuotaSettings* settings) { | 3451 const storage::QuotaSettings* settings) { |
3512 g_default_quota_settings = settings; | 3452 g_default_quota_settings = settings; |
3513 } | 3453 } |
OLD | NEW |