OLD | NEW |
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 "components/sessions/ios/ios_live_tab.h" |
7 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" | 8 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
8 #include "ios/chrome/browser/chrome_url_constants.h" | 9 #include "ios/chrome/browser/chrome_url_constants.h" |
| 10 #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" |
| 12 #include "ios/chrome/browser/tabs/tab.h" |
| 13 #include "ios/chrome/browser/tabs/tab_model.h" |
| 14 #include "ios/chrome/browser/ui/browser_ios.h" |
| 15 #include "ios/chrome/browser/ui/browser_list_ios.h" |
9 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 16 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
10 #include "ios/public/provider/chrome/browser/sessions/live_tab_context_provider.
h" | |
11 #include "ios/web/public/web_thread.h" | 17 #include "ios/web/public/web_thread.h" |
12 #include "url/gurl.h" | 18 #include "url/gurl.h" |
13 | 19 |
14 #if !defined(__has_feature) || !__has_feature(objc_arc) | 20 #if !defined(__has_feature) || !__has_feature(objc_arc) |
15 #error "This file requires ARC support." | 21 #error "This file requires ARC support." |
16 #endif | 22 #endif |
17 | 23 |
18 IOSChromeTabRestoreServiceClient::IOSChromeTabRestoreServiceClient( | 24 IOSChromeTabRestoreServiceClient::IOSChromeTabRestoreServiceClient( |
19 ios::ChromeBrowserState* browser_state) | 25 ios::ChromeBrowserState* browser_state) |
20 : browser_state_(browser_state) {} | 26 : browser_state_(browser_state) {} |
21 | 27 |
22 IOSChromeTabRestoreServiceClient::~IOSChromeTabRestoreServiceClient() {} | 28 IOSChromeTabRestoreServiceClient::~IOSChromeTabRestoreServiceClient() {} |
23 | 29 |
24 sessions::LiveTabContext* | 30 sessions::LiveTabContext* |
25 IOSChromeTabRestoreServiceClient::CreateLiveTabContext( | 31 IOSChromeTabRestoreServiceClient::CreateLiveTabContext( |
26 const std::string& app_name) { | 32 const std::string& app_name) { |
27 return ios::GetChromeBrowserProvider()->GetLiveTabContextProvider()->Create( | 33 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( |
28 browser_state_); | 34 browser_state_); |
29 } | 35 } |
30 | 36 |
31 sessions::LiveTabContext* | 37 sessions::LiveTabContext* |
32 IOSChromeTabRestoreServiceClient::FindLiveTabContextForTab( | 38 IOSChromeTabRestoreServiceClient::FindLiveTabContextForTab( |
33 const sessions::LiveTab* tab) { | 39 const sessions::LiveTab* tab) { |
34 return ios::GetChromeBrowserProvider() | 40 const sessions::IOSLiveTab* requested_tab = |
35 ->GetLiveTabContextProvider() | 41 static_cast<const sessions::IOSLiveTab*>(tab); |
36 ->FindContextForTab(tab); | 42 for (BrowserListIOS::const_iterator iter = BrowserListIOS::begin(); |
| 43 iter != BrowserListIOS::end(); ++iter) { |
| 44 id<BrowserIOS> browser = *iter; |
| 45 for (Tab* current_tab in [browser tabModel]) { |
| 46 if (current_tab.webState && |
| 47 current_tab.webState == requested_tab->web_state()) { |
| 48 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( |
| 49 [browser browserState]); |
| 50 } |
| 51 } |
| 52 } |
| 53 return nullptr; |
37 } | 54 } |
38 | 55 |
39 sessions::LiveTabContext* | 56 sessions::LiveTabContext* |
40 IOSChromeTabRestoreServiceClient::FindLiveTabContextWithID( | 57 IOSChromeTabRestoreServiceClient::FindLiveTabContextWithID( |
41 SessionID::id_type desired_id) { | 58 SessionID::id_type desired_id) { |
42 return ios::GetChromeBrowserProvider() | 59 for (BrowserListIOS::const_iterator iter = BrowserListIOS::begin(); |
43 ->GetLiveTabContextProvider() | 60 iter != BrowserListIOS::end(); ++iter) { |
44 ->FindContextWithID(desired_id); | 61 id<BrowserIOS> browser = *iter; |
| 62 if ([browser tabModel].sessionID.id() == desired_id) { |
| 63 return TabRestoreServiceDelegateImplIOSFactory::GetForBrowserState( |
| 64 [browser browserState]); |
| 65 } |
| 66 } |
| 67 return nullptr; |
45 } | 68 } |
46 | 69 |
47 bool IOSChromeTabRestoreServiceClient::ShouldTrackURLForRestore( | 70 bool IOSChromeTabRestoreServiceClient::ShouldTrackURLForRestore( |
48 const GURL& url) { | 71 const GURL& url) { |
49 // NOTE: In the //chrome client, chrome://quit and chrome://restart are | 72 // NOTE: In the //chrome client, chrome://quit and chrome://restart are |
50 // blacklisted from being tracked to avoid entering infinite loops. However, | 73 // blacklisted from being tracked to avoid entering infinite loops. However, |
51 // iOS intentionally does not support those URLs, so there is no need to | 74 // iOS intentionally does not support those URLs, so there is no need to |
52 // blacklist them here. | 75 // blacklist them here. |
53 return url.is_valid(); | 76 return url.is_valid(); |
54 } | 77 } |
(...skipping 21 matching lines...) Expand all Loading... |
76 | 99 |
77 bool IOSChromeTabRestoreServiceClient::HasLastSession() { | 100 bool IOSChromeTabRestoreServiceClient::HasLastSession() { |
78 return false; | 101 return false; |
79 } | 102 } |
80 | 103 |
81 void IOSChromeTabRestoreServiceClient::GetLastSession( | 104 void IOSChromeTabRestoreServiceClient::GetLastSession( |
82 const sessions::GetLastSessionCallback& callback, | 105 const sessions::GetLastSessionCallback& callback, |
83 base::CancelableTaskTracker* tracker) { | 106 base::CancelableTaskTracker* tracker) { |
84 NOTREACHED(); | 107 NOTREACHED(); |
85 } | 108 } |
OLD | NEW |