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

Side by Side Diff: chrome/browser/extensions/extension_tab_util.cc

Issue 2685333005: ash: fix regression where ctrl+n put new window on wrong desktop (Closed)
Patch Set: rebase to tot Created 3 years, 10 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
OLDNEW
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/extensions/extension_tab_util.h" 5 #include "chrome/browser/extensions/extension_tab_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 88 }
89 } 89 }
90 90
91 if (error_message) 91 if (error_message)
92 *error_message = ErrorUtils::FormatErrorMessage( 92 *error_message = ErrorUtils::FormatErrorMessage(
93 keys::kWindowNotFoundError, base::IntToString(window_id)); 93 keys::kWindowNotFoundError, base::IntToString(window_id));
94 94
95 return NULL; 95 return NULL;
96 } 96 }
97 97
98 Browser* CreateBrowser(Profile* profile, int window_id, std::string* error) { 98 Browser* CreateBrowser(Profile* profile,
99 int window_id,
100 bool user_gesture,
101 std::string* error) {
99 Browser::CreateParams params(Browser::TYPE_TABBED, profile); 102 Browser::CreateParams params(Browser::TYPE_TABBED, profile);
103 params.user_gesture = user_gesture;
100 Browser* browser = new Browser(params); 104 Browser* browser = new Browser(params);
101 browser->window()->Show(); 105 browser->window()->Show();
102 return browser; 106 return browser;
103 } 107 }
104 108
105 // Use this function for reporting a tab id to an extension. It will 109 // Use this function for reporting a tab id to an extension. It will
106 // take care of setting the id to TAB_ID_NONE if necessary (for 110 // take care of setting the id to TAB_ID_NONE if necessary (for
107 // example with devtools). 111 // example with devtools).
108 int GetTabIdForExtensions(const WebContents* web_contents) { 112 int GetTabIdForExtensions(const WebContents* web_contents) {
109 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 113 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
110 if (browser && !ExtensionTabUtil::BrowserSupportsTabs(browser)) 114 if (browser && !ExtensionTabUtil::BrowserSupportsTabs(browser))
111 return -1; 115 return -1;
112 return SessionTabHelper::IdForTab(web_contents); 116 return SessionTabHelper::IdForTab(web_contents);
113 } 117 }
114 118
115 } // namespace 119 } // namespace
116 120
117 ExtensionTabUtil::OpenTabParams::OpenTabParams() 121 ExtensionTabUtil::OpenTabParams::OpenTabParams()
118 : create_browser_if_needed(false) { 122 : create_browser_if_needed(false) {
119 } 123 }
120 124
121 ExtensionTabUtil::OpenTabParams::~OpenTabParams() { 125 ExtensionTabUtil::OpenTabParams::~OpenTabParams() {
122 } 126 }
123 127
124 // Opens a new tab for a given extension. Returns NULL and sets |error| if an 128 // Opens a new tab for a given extension. Returns NULL and sets |error| if an
125 // error occurs. 129 // error occurs.
126 base::DictionaryValue* ExtensionTabUtil::OpenTab( 130 base::DictionaryValue* ExtensionTabUtil::OpenTab(
127 UIThreadExtensionFunction* function, 131 UIThreadExtensionFunction* function,
128 const OpenTabParams& params, 132 const OpenTabParams& params,
133 bool user_gesture,
129 std::string* error) { 134 std::string* error) {
130 ChromeExtensionFunctionDetails chrome_details(function); 135 ChromeExtensionFunctionDetails chrome_details(function);
131 Profile* profile = chrome_details.GetProfile(); 136 Profile* profile = chrome_details.GetProfile();
132 // windowId defaults to "current" window. 137 // windowId defaults to "current" window.
133 int window_id = extension_misc::kCurrentWindowId; 138 int window_id = extension_misc::kCurrentWindowId;
134 if (params.window_id.get()) 139 if (params.window_id.get())
135 window_id = *params.window_id; 140 window_id = *params.window_id;
136 141
137 Browser* browser = GetBrowserFromWindowID(chrome_details, window_id, error); 142 Browser* browser = GetBrowserFromWindowID(chrome_details, window_id, error);
138 if (!browser) { 143 if (!browser) {
139 if (!params.create_browser_if_needed) { 144 if (!params.create_browser_if_needed) {
140 return NULL; 145 return NULL;
141 } 146 }
142 browser = CreateBrowser(profile, window_id, error); 147 browser = CreateBrowser(profile, window_id, user_gesture, error);
143 if (!browser) 148 if (!browser)
144 return NULL; 149 return NULL;
145 } 150 }
146 151
147 // Ensure the selected browser is tabbed. 152 // Ensure the selected browser is tabbed.
148 if (!browser->is_type_tabbed() && browser->IsAttemptingToCloseBrowser()) 153 if (!browser->is_type_tabbed() && browser->IsAttemptingToCloseBrowser())
149 browser = chrome::FindTabbedBrowser(profile, function->include_incognito()); 154 browser = chrome::FindTabbedBrowser(profile, function->include_incognito());
150 if (!browser || !browser->window()) { 155 if (!browser || !browser->window()) {
151 if (error) 156 if (error)
152 *error = keys::kNoCurrentWindowError; 157 *error = keys::kNoCurrentWindowError;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 213
209 // We can't load extension URLs into incognito windows unless the extension 214 // We can't load extension URLs into incognito windows unless the extension
210 // uses split mode. Special case to fall back to a tabbed window. 215 // uses split mode. Special case to fall back to a tabbed window.
211 if (url.SchemeIs(kExtensionScheme) && 216 if (url.SchemeIs(kExtensionScheme) &&
212 !IncognitoInfo::IsSplitMode(function->extension()) && 217 !IncognitoInfo::IsSplitMode(function->extension()) &&
213 browser->profile()->IsOffTheRecord()) { 218 browser->profile()->IsOffTheRecord()) {
214 Profile* profile = browser->profile()->GetOriginalProfile(); 219 Profile* profile = browser->profile()->GetOriginalProfile();
215 220
216 browser = chrome::FindTabbedBrowser(profile, false); 221 browser = chrome::FindTabbedBrowser(profile, false);
217 if (!browser) { 222 if (!browser) {
218 browser = 223 Browser::CreateParams params =
219 new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile)); 224 Browser::CreateParams(Browser::TYPE_TABBED, profile);
225 params.user_gesture = user_gesture;
226 browser = new Browser(params);
220 browser->window()->Show(); 227 browser->window()->Show();
221 } 228 }
222 } 229 }
223 230
224 // If index is specified, honor the value, but keep it bound to 231 // If index is specified, honor the value, but keep it bound to
225 // -1 <= index <= tab_strip->count() where -1 invokes the default behavior. 232 // -1 <= index <= tab_strip->count() where -1 invokes the default behavior.
226 int index = -1; 233 int index = -1;
227 if (params.index.get()) 234 if (params.index.get())
228 index = *params.index; 235 index = *params.index;
229 236
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 583
577 void ExtensionTabUtil::CreateTab(WebContents* web_contents, 584 void ExtensionTabUtil::CreateTab(WebContents* web_contents,
578 const std::string& extension_id, 585 const std::string& extension_id,
579 WindowOpenDisposition disposition, 586 WindowOpenDisposition disposition,
580 const gfx::Rect& initial_rect, 587 const gfx::Rect& initial_rect,
581 bool user_gesture) { 588 bool user_gesture) {
582 Profile* profile = 589 Profile* profile =
583 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 590 Profile::FromBrowserContext(web_contents->GetBrowserContext());
584 Browser* browser = chrome::FindTabbedBrowser(profile, false); 591 Browser* browser = chrome::FindTabbedBrowser(profile, false);
585 const bool browser_created = !browser; 592 const bool browser_created = !browser;
586 if (!browser) 593 if (!browser) {
587 browser = new Browser(Browser::CreateParams(profile)); 594 Browser::CreateParams params = Browser::CreateParams(profile);
595 params.user_gesture = user_gesture;
596 browser = new Browser(params);
597 }
588 chrome::NavigateParams params(browser, web_contents); 598 chrome::NavigateParams params(browser, web_contents);
589 599
590 // The extension_app_id parameter ends up as app_name in the Browser 600 // The extension_app_id parameter ends up as app_name in the Browser
591 // which causes the Browser to return true for is_app(). This affects 601 // which causes the Browser to return true for is_app(). This affects
592 // among other things, whether the location bar gets displayed. 602 // among other things, whether the location bar gets displayed.
593 // TODO(mpcomplete): This seems wrong. What if the extension content is hosted 603 // TODO(mpcomplete): This seems wrong. What if the extension content is hosted
594 // in a tab? 604 // in a tab?
595 if (disposition == WindowOpenDisposition::NEW_POPUP) 605 if (disposition == WindowOpenDisposition::NEW_POPUP)
596 params.extension_app_id = extension_id; 606 params.extension_app_id = extension_id;
597 607
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 chrome::ShowSingletonTabOverwritingNTP(browser, params); 677 chrome::ShowSingletonTabOverwritingNTP(browser, params);
668 return true; 678 return true;
669 } 679 }
670 680
671 // static 681 // static
672 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) { 682 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) {
673 return browser && browser->tab_strip_model() && !browser->is_devtools(); 683 return browser && browser->tab_strip_model() && !browser->is_devtools();
674 } 684 }
675 685
676 } // namespace extensions 686 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698