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

Unified Diff: chrome/browser/ui/browser_finder.cc

Issue 2894743002: Make launching apps from shelf more intuitive (Closed)
Patch Set: Affected by new revision, gclient sync and re-upload. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/browser_finder.h ('k') | chrome/browser/ui/extensions/app_launch_params.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_finder.cc
diff --git a/chrome/browser/ui/browser_finder.cc b/chrome/browser/ui/browser_finder.cc
index 66d11e97d38380b4e7716b39bd592ed3b78bfe48..cd2ba0bf3618db5aa99f2412f0384b32b78a6a6d 100644
--- a/chrome/browser/ui/browser_finder.cc
+++ b/chrome/browser/ui/browser_finder.cc
@@ -13,6 +13,8 @@
#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "content/public/browser/navigation_controller.h"
+#include "ui/display/display.h"
+#include "ui/display/screen.h"
#if defined(OS_CHROMEOS)
#include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
@@ -32,6 +34,7 @@ const int kMatchAny = 0;
const int kMatchOriginalProfile = 1 << 0;
const int kMatchCanSupportWindowFeature = 1 << 1;
const int kMatchTabbed = 1 << 2;
+const int kMatchDisplayId = 1 << 3;
// Returns true if the specified |browser| matches the specified arguments.
// |match_types| is a bitmask dictating what parameters to match:
@@ -44,7 +47,8 @@ const int kMatchTabbed = 1 << 2;
bool BrowserMatches(Browser* browser,
Profile* profile,
Browser::WindowFeature window_feature,
- uint32_t match_types) {
+ uint32_t match_types,
+ int64_t display_id) {
if ((match_types & kMatchCanSupportWindowFeature) &&
!browser->CanSupportWindowFeature(window_feature)) {
return false;
@@ -85,8 +89,14 @@ bool BrowserMatches(Browser* browser,
#endif
}
- if (match_types & kMatchTabbed)
- return browser->is_type_tabbed();
+ if ((match_types & kMatchTabbed) && !browser->is_type_tabbed())
+ return false;
+
+ if (match_types & kMatchDisplayId) {
+ return display::Screen::GetScreen()
+ ->GetDisplayNearestWindow(browser->window()->GetNativeWindow())
+ .id() == display_id;
+ }
return true;
}
@@ -99,17 +109,20 @@ Browser* FindBrowserMatching(const T& begin,
const T& end,
Profile* profile,
Browser::WindowFeature window_feature,
- uint32_t match_types) {
+ uint32_t match_types,
+ int64_t display_id = display::kInvalidDisplayId) {
for (T i = begin; i != end; ++i) {
- if (BrowserMatches(*i, profile, window_feature, match_types))
+ if (BrowserMatches(*i, profile, window_feature, match_types, display_id))
return *i;
}
return NULL;
}
-Browser* FindBrowserWithTabbedOrAnyType(Profile* profile,
- bool match_tabbed,
- bool match_original_profiles) {
+Browser* FindBrowserWithTabbedOrAnyType(
+ Profile* profile,
+ bool match_tabbed,
+ bool match_original_profiles,
+ int64_t display_id = display::kInvalidDisplayId) {
BrowserList* browser_list_impl = BrowserList::GetInstance();
if (!browser_list_impl)
return NULL;
@@ -118,27 +131,29 @@ Browser* FindBrowserWithTabbedOrAnyType(Profile* profile,
match_types |= kMatchTabbed;
if (match_original_profiles)
match_types |= kMatchOriginalProfile;
- Browser* browser = FindBrowserMatching(browser_list_impl->begin_last_active(),
- browser_list_impl->end_last_active(),
- profile,
- Browser::FEATURE_NONE,
- match_types);
+ if (display_id != display::kInvalidDisplayId)
+ match_types |= kMatchDisplayId;
+ Browser* browser =
+ FindBrowserMatching(browser_list_impl->begin_last_active(),
+ browser_list_impl->end_last_active(), profile,
+ Browser::FEATURE_NONE, match_types, display_id);
// Fall back to a forward scan of all Browsers if no active one was found.
- return browser ? browser : FindBrowserMatching(browser_list_impl->begin(),
- browser_list_impl->end(),
- profile,
- Browser::FEATURE_NONE,
- match_types);
+ return browser ? browser
+ : FindBrowserMatching(
+ browser_list_impl->begin(), browser_list_impl->end(),
+ profile, Browser::FEATURE_NONE, match_types, display_id);
}
size_t GetBrowserCountImpl(Profile* profile,
- uint32_t match_types) {
+ uint32_t match_types,
+ int64_t display_id = display::kInvalidDisplayId) {
BrowserList* browser_list_impl = BrowserList::GetInstance();
size_t count = 0;
if (browser_list_impl) {
for (BrowserList::const_iterator i = browser_list_impl->begin();
i != browser_list_impl->end(); ++i) {
- if (BrowserMatches(*i, profile, Browser::FEATURE_NONE, match_types))
+ if (BrowserMatches(*i, profile, Browser::FEATURE_NONE, match_types,
+ display_id))
count++;
}
}
@@ -150,8 +165,10 @@ size_t GetBrowserCountImpl(Profile* profile,
namespace chrome {
Browser* FindTabbedBrowser(Profile* profile,
- bool match_original_profiles) {
- return FindBrowserWithTabbedOrAnyType(profile, true, match_original_profiles);
+ bool match_original_profiles,
+ int64_t display_id) {
+ return FindBrowserWithTabbedOrAnyType(profile, true, match_original_profiles,
+ display_id);
}
Browser* FindAnyBrowser(Profile* profile,
« no previous file with comments | « chrome/browser/ui/browser_finder.h ('k') | chrome/browser/ui/extensions/app_launch_params.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698