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/ui/browser_navigator.h" | 5 #include "chrome/browser/ui/browser_navigator.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "chrome/browser/browser_about_handler.h" | 13 #include "chrome/browser/browser_about_handler.h" |
14 #include "chrome/browser/chrome_notification_types.h" | 14 #include "chrome/browser/chrome_notification_types.h" |
15 #include "chrome/browser/extensions/tab_helper.h" | |
16 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 15 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
17 #include "chrome/browser/prerender/prerender_manager.h" | 16 #include "chrome/browser/prerender/prerender_manager.h" |
18 #include "chrome/browser/prerender/prerender_manager_factory.h" | 17 #include "chrome/browser/prerender/prerender_manager_factory.h" |
19 #include "chrome/browser/prerender/prerender_util.h" | 18 #include "chrome/browser/prerender/prerender_util.h" |
20 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
21 #include "chrome/browser/tab_contents/tab_util.h" | 20 #include "chrome/browser/tab_contents/tab_util.h" |
22 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
23 #include "chrome/browser/ui/browser_finder.h" | 22 #include "chrome/browser/ui/browser_finder.h" |
24 #include "chrome/browser/ui/browser_instant_controller.h" | 23 #include "chrome/browser/ui/browser_instant_controller.h" |
25 #include "chrome/browser/ui/browser_window.h" | 24 #include "chrome/browser/ui/browser_window.h" |
26 #include "chrome/browser/ui/host_desktop.h" | 25 #include "chrome/browser/ui/host_desktop.h" |
27 #include "chrome/browser/ui/location_bar/location_bar.h" | 26 #include "chrome/browser/ui/location_bar/location_bar.h" |
28 #include "chrome/browser/ui/search/instant_search_prerenderer.h" | 27 #include "chrome/browser/ui/search/instant_search_prerenderer.h" |
29 #include "chrome/browser/ui/singleton_tabs.h" | 28 #include "chrome/browser/ui/singleton_tabs.h" |
30 #include "chrome/browser/ui/status_bubble.h" | 29 #include "chrome/browser/ui/status_bubble.h" |
31 #include "chrome/browser/ui/tab_helpers.h" | 30 #include "chrome/browser/ui/tab_helpers.h" |
32 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 31 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
33 #include "chrome/browser/web_applications/web_app.h" | |
34 #include "chrome/common/pref_names.h" | 32 #include "chrome/common/pref_names.h" |
35 #include "chrome/common/url_constants.h" | 33 #include "chrome/common/url_constants.h" |
36 #include "components/google/core/browser/google_url_tracker.h" | 34 #include "components/google/core/browser/google_url_tracker.h" |
37 #include "content/public/browser/browser_url_handler.h" | 35 #include "content/public/browser/browser_url_handler.h" |
38 #include "content/public/browser/navigation_entry.h" | 36 #include "content/public/browser/navigation_entry.h" |
39 #include "content/public/browser/notification_service.h" | 37 #include "content/public/browser/notification_service.h" |
40 #include "content/public/browser/render_view_host.h" | 38 #include "content/public/browser/render_view_host.h" |
41 #include "content/public/browser/web_contents.h" | 39 #include "content/public/browser/web_contents.h" |
42 | 40 |
43 #if defined(USE_ASH) | 41 #if defined(USE_ASH) |
44 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" | 42 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" |
45 #endif | 43 #endif |
46 | 44 |
47 #if defined(USE_AURA) | 45 #if defined(USE_AURA) |
48 #include "ui/aura/window.h" | 46 #include "ui/aura/window.h" |
49 #endif | 47 #endif |
50 | 48 |
51 #if defined(ENABLE_EXTENSIONS) | 49 #if defined(ENABLE_EXTENSIONS) |
| 50 #include "chrome/browser/extensions/tab_helper.h" |
| 51 #include "chrome/browser/web_applications/web_app.h" |
52 #include "extensions/browser/extension_registry.h" | 52 #include "extensions/browser/extension_registry.h" |
53 #include "extensions/common/extension.h" | 53 #include "extensions/common/extension.h" |
54 #include "extensions/common/extension_set.h" | 54 #include "extensions/common/extension_set.h" |
55 #endif | 55 #endif |
56 | 56 |
57 using content::GlobalRequestID; | 57 using content::GlobalRequestID; |
58 using content::NavigationController; | 58 using content::NavigationController; |
59 using content::WebContents; | 59 using content::WebContents; |
60 | 60 |
61 class BrowserNavigatorWebContentsAdoption { | 61 class BrowserNavigatorWebContentsAdoption { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 // See if we can open the tab in the window this navigator is bound to. | 147 // See if we can open the tab in the window this navigator is bound to. |
148 if (params->browser && WindowCanOpenTabs(params->browser)) | 148 if (params->browser && WindowCanOpenTabs(params->browser)) |
149 return params->browser; | 149 return params->browser; |
150 // Find a compatible window and re-execute this command in it. Otherwise | 150 // Find a compatible window and re-execute this command in it. Otherwise |
151 // re-run with NEW_WINDOW. | 151 // re-run with NEW_WINDOW. |
152 return GetOrCreateBrowser(profile, params->host_desktop_type); | 152 return GetOrCreateBrowser(profile, params->host_desktop_type); |
153 case NEW_POPUP: { | 153 case NEW_POPUP: { |
154 // Make a new popup window. | 154 // Make a new popup window. |
155 // Coerce app-style if |source| represents an app. | 155 // Coerce app-style if |source| represents an app. |
156 std::string app_name; | 156 std::string app_name; |
| 157 #if defined(ENABLE_EXTENSIONS) |
157 if (!params->extension_app_id.empty()) { | 158 if (!params->extension_app_id.empty()) { |
158 app_name = web_app::GenerateApplicationNameFromExtensionId( | 159 app_name = web_app::GenerateApplicationNameFromExtensionId( |
159 params->extension_app_id); | 160 params->extension_app_id); |
160 } else if (params->browser && !params->browser->app_name().empty()) { | 161 } else if (params->browser && !params->browser->app_name().empty()) { |
161 app_name = params->browser->app_name(); | 162 app_name = params->browser->app_name(); |
162 } else if (params->source_contents) { | 163 } else if (params->source_contents) { |
163 extensions::TabHelper* extensions_tab_helper = | 164 extensions::TabHelper* extensions_tab_helper = |
164 extensions::TabHelper::FromWebContents(params->source_contents); | 165 extensions::TabHelper::FromWebContents(params->source_contents); |
165 if (extensions_tab_helper && extensions_tab_helper->is_app()) { | 166 if (extensions_tab_helper && extensions_tab_helper->is_app()) { |
166 app_name = web_app::GenerateApplicationNameFromExtensionId( | 167 app_name = web_app::GenerateApplicationNameFromExtensionId( |
167 extensions_tab_helper->extension_app()->id()); | 168 extensions_tab_helper->extension_app()->id()); |
168 } | 169 } |
169 } | 170 } |
| 171 #endif |
170 if (app_name.empty()) { | 172 if (app_name.empty()) { |
171 Browser::CreateParams browser_params( | 173 Browser::CreateParams browser_params( |
172 Browser::TYPE_POPUP, profile, params->host_desktop_type); | 174 Browser::TYPE_POPUP, profile, params->host_desktop_type); |
173 browser_params.trusted_source = params->trusted_source; | 175 browser_params.trusted_source = params->trusted_source; |
174 browser_params.initial_bounds = params->window_bounds; | 176 browser_params.initial_bounds = params->window_bounds; |
175 return new Browser(browser_params); | 177 return new Browser(browser_params); |
176 } | 178 } |
177 | 179 |
178 return new Browser(Browser::CreateParams::CreateForApp( | 180 return new Browser(Browser::CreateParams::CreateForApp( |
179 app_name, | 181 app_name, |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 params.browser->window()->GetNativeWindow(); | 367 params.browser->window()->GetNativeWindow(); |
366 } | 368 } |
367 #endif | 369 #endif |
368 | 370 |
369 WebContents* target_contents = WebContents::Create(create_params); | 371 WebContents* target_contents = WebContents::Create(create_params); |
370 | 372 |
371 // New tabs can have WebUI URLs that will make calls back to arbitrary | 373 // New tabs can have WebUI URLs that will make calls back to arbitrary |
372 // tab helpers, so the entire set of tab helpers needs to be set up | 374 // tab helpers, so the entire set of tab helpers needs to be set up |
373 // immediately. | 375 // immediately. |
374 BrowserNavigatorWebContentsAdoption::AttachTabHelpers(target_contents); | 376 BrowserNavigatorWebContentsAdoption::AttachTabHelpers(target_contents); |
| 377 #if defined(ENABLE_EXTENSIONS) |
375 extensions::TabHelper::FromWebContents(target_contents)-> | 378 extensions::TabHelper::FromWebContents(target_contents)-> |
376 SetExtensionAppById(params.extension_app_id); | 379 SetExtensionAppById(params.extension_app_id); |
| 380 #endif |
377 return target_contents; | 381 return target_contents; |
378 } | 382 } |
379 | 383 |
380 // If a prerendered page exists for |url|, replace the page at | 384 // If a prerendered page exists for |url|, replace the page at |
381 // |params->target_contents| with it and update to point to the swapped-in | 385 // |params->target_contents| with it and update to point to the swapped-in |
382 // WebContents. | 386 // WebContents. |
383 bool SwapInPrerender(const GURL& url, chrome::NavigateParams* params) { | 387 bool SwapInPrerender(const GURL& url, chrome::NavigateParams* params) { |
384 Profile* profile = | 388 Profile* profile = |
385 Profile::FromBrowserContext(params->target_contents->GetBrowserContext()); | 389 Profile::FromBrowserContext(params->target_contents->GetBrowserContext()); |
386 InstantSearchPrerenderer* prerenderer = | 390 InstantSearchPrerenderer* prerenderer = |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 bool reverse_on_redirect = false; | 769 bool reverse_on_redirect = false; |
766 content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary( | 770 content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary( |
767 &rewritten_url, browser_context, &reverse_on_redirect); | 771 &rewritten_url, browser_context, &reverse_on_redirect); |
768 | 772 |
769 // Some URLs are mapped to uber subpages. Do not allow them in incognito. | 773 // Some URLs are mapped to uber subpages. Do not allow them in incognito. |
770 return !(rewritten_url.scheme() == content::kChromeUIScheme && | 774 return !(rewritten_url.scheme() == content::kChromeUIScheme && |
771 rewritten_url.host() == chrome::kChromeUIUberHost); | 775 rewritten_url.host() == chrome::kChromeUIUberHost); |
772 } | 776 } |
773 | 777 |
774 } // namespace chrome | 778 } // namespace chrome |
OLD | NEW |