| Index: chrome/browser/ui/startup/startup_browser_creator.cc
|
| diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
|
| index f7fac34905f789c96ce28d0107dca525986da7ce..c220c4dfbe10c6b05626e882bee65a9ce7e2d8d8 100644
|
| --- a/chrome/browser/ui/startup/startup_browser_creator.cc
|
| +++ b/chrome/browser/ui/startup/startup_browser_creator.cc
|
| @@ -446,6 +446,43 @@ void StartupBrowserCreator::RegisterLocalStatePrefs(
|
| }
|
|
|
| // static
|
| +bool StartupBrowserCreator::HasUrlFilters() {
|
| + return !GetUrlFilters()->empty();
|
| +}
|
| +
|
| +// static
|
| +bool StartupBrowserCreator::ExecuteFilterCallback(const GURL& url) {
|
| + UrlFilters* filters = GetUrlFilters();
|
| + auto it = filters->find(url);
|
| + if (it != filters->end()) {
|
| + it->second.Run();
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +// static
|
| +bool StartupBrowserCreator::UrlFilterExists(const GURL& url) {
|
| + UrlFilters* filters = GetUrlFilters();
|
| + return filters->find(url) != filters->end();
|
| +}
|
| +
|
| +// static
|
| +void StartupBrowserCreator::AddUrlFilter(
|
| + const GURL& url,
|
| + const base::Callback<void(void)>& callback) {
|
| + GetUrlFilters()->insert({url, callback});
|
| +}
|
| +
|
| +// static
|
| +void StartupBrowserCreator::RemoveUrlFilter(const GURL& url) {
|
| + DCHECK(UrlFilterExists(url));
|
| +
|
| + UrlFilters* filters = GetUrlFilters();
|
| + filters->erase(filters->find(url));
|
| +}
|
| +
|
| +// static
|
| std::vector<GURL> StartupBrowserCreator::GetURLsFromCommandLine(
|
| const base::CommandLine& command_line,
|
| const base::FilePath& cur_dir,
|
| @@ -511,6 +548,7 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
|
| Profile* last_used_profile,
|
| const Profiles& last_opened_profiles,
|
| StartupBrowserCreator* browser_creator) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| TRACE_EVENT0("startup", "StartupBrowserCreator::ProcessCmdLineImpl");
|
|
|
| DCHECK(last_used_profile);
|
| @@ -649,6 +687,15 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
|
| return true;
|
| }
|
|
|
| + // Filters out specific urls.
|
| + if (HasUrlFilters()) {
|
| + for (const auto& arg : command_line.GetArgs()) {
|
| + GURL url(arg);
|
| + if (url.is_valid() && browser_creator->ExecuteFilterCallback(url))
|
| + return true;
|
| + }
|
| + }
|
| +
|
| #if defined(OS_WIN)
|
| // Log whether this process was a result of an action in the Windows Jumplist.
|
| if (command_line.HasSwitch(switches::kWinJumplistAction)) {
|
| @@ -827,6 +874,12 @@ bool StartupBrowserCreator::ActivatedProfile() {
|
| return profile_launch_observer.Get().activated_profile();
|
| }
|
|
|
| +// static
|
| +StartupBrowserCreator::UrlFilters* StartupBrowserCreator::GetUrlFilters() {
|
| + static UrlFilters* url_filters_ = new UrlFilters();
|
| + return url_filters_;
|
| +}
|
| +
|
| bool HasPendingUncleanExit(Profile* profile) {
|
| return profile->GetLastSessionExitType() == Profile::EXIT_CRASHED &&
|
| !profile_launch_observer.Get().HasBeenLaunched(profile);
|
|
|