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

Side by Side Diff: ios/chrome/browser/sessions/ios_chrome_tab_restore_service_client.mm

Issue 2615003002: Use ChromeBrowserStateManager instead of BrowserListIOS. (Closed)
Patch Set: Fix ios_chrome_perftests. Created 3 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_client.h" 5 #include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_client.h"
6 6
7 #include "base/bind.h"
8 #include "base/callback.h"
7 #include "components/sessions/ios/ios_live_tab.h" 9 #include "components/sessions/ios/ios_live_tab.h"
10 #include "ios/chrome/browser/application_context.h"
8 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" 11 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
12 #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
9 #include "ios/chrome/browser/chrome_url_constants.h" 13 #include "ios/chrome/browser/chrome_url_constants.h"
10 #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios.h" 14 #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios.h"
11 #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios_fact ory.h" 15 #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios_fact ory.h"
12 #include "ios/chrome/browser/tabs/tab.h" 16 #import "ios/chrome/browser/tabs/tab.h"
13 #include "ios/chrome/browser/tabs/tab_model.h" 17 #import "ios/chrome/browser/tabs/tab_model.h"
14 #include "ios/chrome/browser/ui/browser_ios.h" 18 #import "ios/chrome/browser/tabs/tab_model_list.h"
15 #include "ios/chrome/browser/ui/browser_list_ios.h"
16 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" 19 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
17 #include "ios/web/public/web_thread.h" 20 #include "ios/web/public/web_thread.h"
18 #include "url/gurl.h" 21 #include "url/gurl.h"
19 22
20 #if !defined(__has_feature) || !__has_feature(objc_arc) 23 #if !defined(__has_feature) || !__has_feature(objc_arc)
21 #error "This file requires ARC support." 24 #error "This file requires ARC support."
22 #endif 25 #endif
23 26
27 namespace {
28 sessions::LiveTabContext* FindLiveTabContextWithCondition(
29 const base::Callback<bool(TabModel*)>& condition) {
30 std::vector<ios::ChromeBrowserState*> browser_states =
31 GetApplicationContext()
32 ->GetChromeBrowserStateManager()
33 ->GetLoadedBrowserStates();
34
35 for (ios::ChromeBrowserState* browser_state : browser_states) {
36 DCHECK(!browser_state->IsOffTheRecord());
37 NSArray<TabModel*>* tab_models;
38
39 tab_models = GetTabModelsForChromeBrowserState(browser_state);
40 for (TabModel* tab_model : tab_models) {
41 if (condition.Run(tab_model)) {
42 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState(
43 browser_state);
44 }
45 }
46
47 if (!browser_state->HasOffTheRecordChromeBrowserState())
48 continue;
49
50 ios::ChromeBrowserState* otr_browser_state =
51 browser_state->GetOffTheRecordChromeBrowserState();
52
53 tab_models = GetTabModelsForChromeBrowserState(otr_browser_state);
54 for (TabModel* tab_model : tab_models) {
55 if (condition.Run(tab_model)) {
56 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState(
57 browser_state);
58 }
59 }
60 }
61
62 return nullptr;
63 }
64 } // namespace
65
24 IOSChromeTabRestoreServiceClient::IOSChromeTabRestoreServiceClient( 66 IOSChromeTabRestoreServiceClient::IOSChromeTabRestoreServiceClient(
25 ios::ChromeBrowserState* browser_state) 67 ios::ChromeBrowserState* browser_state)
26 : browser_state_(browser_state) {} 68 : browser_state_(browser_state) {}
27 69
28 IOSChromeTabRestoreServiceClient::~IOSChromeTabRestoreServiceClient() {} 70 IOSChromeTabRestoreServiceClient::~IOSChromeTabRestoreServiceClient() {}
29 71
30 sessions::LiveTabContext* 72 sessions::LiveTabContext*
31 IOSChromeTabRestoreServiceClient::CreateLiveTabContext( 73 IOSChromeTabRestoreServiceClient::CreateLiveTabContext(
32 const std::string& app_name) { 74 const std::string& app_name) {
33 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( 75 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState(
34 browser_state_); 76 browser_state_);
35 } 77 }
36 78
37 sessions::LiveTabContext* 79 sessions::LiveTabContext*
38 IOSChromeTabRestoreServiceClient::FindLiveTabContextForTab( 80 IOSChromeTabRestoreServiceClient::FindLiveTabContextForTab(
39 const sessions::LiveTab* tab) { 81 const sessions::LiveTab* tab) {
40 const sessions::IOSLiveTab* requested_tab = 82 const sessions::IOSLiveTab* requested_tab =
41 static_cast<const sessions::IOSLiveTab*>(tab); 83 static_cast<const sessions::IOSLiveTab*>(tab);
42 for (BrowserListIOS::const_iterator iter = BrowserListIOS::begin(); 84
43 iter != BrowserListIOS::end(); ++iter) { 85 return FindLiveTabContextWithCondition(base::Bind(
44 id<BrowserIOS> browser = *iter; 86 [](const web::WebState* web_state, TabModel* tab_model) {
45 for (Tab* current_tab in [browser tabModel]) { 87 for (Tab* current_tab in tab_model) {
46 if (current_tab.webState && 88 if (current_tab.webState && current_tab.webState == web_state) {
47 current_tab.webState == requested_tab->web_state()) { 89 return true;
48 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( 90 }
49 [browser browserState]); 91 }
50 } 92 return false;
51 } 93 },
52 } 94 requested_tab->web_state()));
53 return nullptr;
54 } 95 }
55 96
56 sessions::LiveTabContext* 97 sessions::LiveTabContext*
57 IOSChromeTabRestoreServiceClient::FindLiveTabContextWithID( 98 IOSChromeTabRestoreServiceClient::FindLiveTabContextWithID(
58 SessionID::id_type desired_id) { 99 SessionID::id_type desired_id) {
59 for (BrowserListIOS::const_iterator iter = BrowserListIOS::begin(); 100 return FindLiveTabContextWithCondition(base::Bind(
60 iter != BrowserListIOS::end(); ++iter) { 101 [](SessionID::id_type desired_id, TabModel* tab_model) {
61 id<BrowserIOS> browser = *iter; 102 return tab_model.sessionID.id() == desired_id;
62 if ([browser tabModel].sessionID.id() == desired_id) { 103 },
63 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( 104 desired_id));
64 [browser browserState]);
65 }
66 }
67 return nullptr;
68 } 105 }
69 106
70 bool IOSChromeTabRestoreServiceClient::ShouldTrackURLForRestore( 107 bool IOSChromeTabRestoreServiceClient::ShouldTrackURLForRestore(
71 const GURL& url) { 108 const GURL& url) {
72 // NOTE: In the //chrome client, chrome://quit and chrome://restart are 109 // NOTE: In the //chrome client, chrome://quit and chrome://restart are
73 // blacklisted from being tracked to avoid entering infinite loops. However, 110 // blacklisted from being tracked to avoid entering infinite loops. However,
74 // iOS intentionally does not support those URLs, so there is no need to 111 // iOS intentionally does not support those URLs, so there is no need to
75 // blacklist them here. 112 // blacklist them here.
76 return url.is_valid(); 113 return url.is_valid();
77 } 114 }
(...skipping 21 matching lines...) Expand all
99 136
100 bool IOSChromeTabRestoreServiceClient::HasLastSession() { 137 bool IOSChromeTabRestoreServiceClient::HasLastSession() {
101 return false; 138 return false;
102 } 139 }
103 140
104 void IOSChromeTabRestoreServiceClient::GetLastSession( 141 void IOSChromeTabRestoreServiceClient::GetLastSession(
105 const sessions::GetLastSessionCallback& callback, 142 const sessions::GetLastSessionCallback& callback,
106 base::CancelableTaskTracker* tracker) { 143 base::CancelableTaskTracker* tracker) {
107 NOTREACHED(); 144 NOTREACHED();
108 } 145 }
OLDNEW
« no previous file with comments | « ios/chrome/browser/sessions/BUILD.gn ('k') | ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698