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

Side by Side Diff: chrome/browser/ui/android/tab_model/tab_model.cc

Issue 15055003: Do not submit: high level overview patch. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix build. Created 7 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 unified diff | Download patch | Annotate | Revision Log
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/ui/android/tab_model/tab_model.h" 5 #include "chrome/browser/ui/android/tab_model/tab_model.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/search_engines/search_terms_data.h" 10 #include "chrome/browser/search_engines/search_terms_data.h"
11 #include "chrome/browser/sync/glue/synced_tab_delegate.h"
11 #include "chrome/browser/sync/glue/synced_window_delegate_android.h" 12 #include "chrome/browser/sync/glue/synced_window_delegate_android.h"
12 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h" 13 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
13 #include "chrome/common/chrome_notification_types.h" 14 #include "chrome/common/chrome_notification_types.h"
14 #include "content/public/browser/notification_service.h" 15 #include "content/public/browser/notification_service.h"
15 16
16 using content::NotificationService; 17 using content::NotificationService;
18 using browser_sync::SyncedTabDelegate;
19 using browser_sync::SyncedWindowDelegate;
17 20
18 TabModel::TabModel(Profile* profile) 21 TabModel::TabModel(Profile* profile)
19 : profile_(profile), 22 : profile_(profile),
20 synced_window_delegate_( 23 synced_window_delegate_(
21 new browser_sync::SyncedWindowDelegateAndroid(this)), 24 new browser_sync::SyncedWindowDelegateAndroid(this)),
22 toolbar_model_(new ToolbarModelImpl(this)) { 25 toolbar_model_(new ToolbarModelImpl(this)) {
23 26
24 if (profile) { 27 if (profile) {
25 // A normal Profile creates an OTR profile if it does not exist when 28 // A normal Profile creates an OTR profile if it does not exist when
26 // GetOffTheRecordProfile() is called, so we guard it with 29 // GetOffTheRecordProfile() is called, so we guard it with
27 // HasOffTheRecordProfile(). An OTR profile returns itself when you call 30 // HasOffTheRecordProfile(). An OTR profile returns itself when you call
28 // GetOffTheRecordProfile(). 31 // GetOffTheRecordProfile().
29 is_off_the_record_ = (profile->HasOffTheRecordProfile() && 32 is_off_the_record_ = (profile->HasOffTheRecordProfile() &&
30 profile == profile->GetOffTheRecordProfile()); 33 profile == profile->GetOffTheRecordProfile());
31 34
32 // A profile can be destroyed, for example in the case of closing all 35 // A profile can be destroyed, for example in the case of closing all
33 // incognito tabs. We therefore must listen for when this happens, and 36 // incognito tabs. We therefore must listen for when this happens, and
34 // remove our pointer to the profile accordingly. 37 // remove our pointer to the profile accordingly.
35 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, 38 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
36 content::Source<Profile>(profile_)); 39 content::Source<Profile>(profile_));
37 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED, 40 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CREATED,
38 content::NotificationService::AllSources()); 41 content::NotificationService::AllSources());
42 registrar_.Add(this,
43 chrome::NOTIFICATION_SESSION_SYNC_ID_GENERATED,
44 content::NotificationService::AllSources());
39 } else { 45 } else {
40 is_off_the_record_ = false; 46 is_off_the_record_ = false;
41 } 47 }
42 } 48 }
43 49
44 TabModel::TabModel() 50 TabModel::TabModel()
45 : profile_(NULL), 51 : profile_(NULL),
46 is_off_the_record_(false), 52 is_off_the_record_(false),
47 synced_window_delegate_( 53 synced_window_delegate_(
48 new browser_sync::SyncedWindowDelegateAndroid(this)) { 54 new browser_sync::SyncedWindowDelegateAndroid(this)) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 // Our incognito tab model out lives the profile, so we need to recapture 129 // Our incognito tab model out lives the profile, so we need to recapture
124 // the pointer if ours was previously deleted. 130 // the pointer if ours was previously deleted.
125 // NOTIFICATION_PROFILE_DESTROYED is not sent for every destruction, so 131 // NOTIFICATION_PROFILE_DESTROYED is not sent for every destruction, so
126 // we overwrite the pointer regardless of whether it's NULL. 132 // we overwrite the pointer regardless of whether it's NULL.
127 if (is_off_the_record_) { 133 if (is_off_the_record_) {
128 Profile* profile = content::Source<Profile>(source).ptr(); 134 Profile* profile = content::Source<Profile>(source).ptr();
129 if (profile && profile->IsOffTheRecord()) 135 if (profile && profile->IsOffTheRecord())
130 profile_ = profile; 136 profile_ = profile;
131 } 137 }
132 break; 138 break;
139 case chrome::NOTIFICATION_SESSION_SYNC_ID_GENERATED: {
140 content::Details<const SyncedTabDelegate> tab(details);
141 const SyncedWindowDelegate* sync_window_delegate =
142 SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
143 tab->GetWindowId().id());
144 if (sync_window_delegate) {
145 const int tab_count = sync_window_delegate->GetTabCount();
146 for (int i = 0; i < tab_count; ++i) {
147 SyncedTabDelegate* sync_tab = sync_window_delegate->GetTabAt(i);
148 // This may seem redundant, but it ensure Sync id is set in java.
149 if (sync_tab && sync_tab->IsTabInMemory() &&
150 sync_tab->GetSyncSessionId() == tab->GetSyncSessionId()) {
151 sync_tab->SetSyncSessionId(tab->GetSyncSessionId());
152 break;
153 }
154 }
155 }
156 } break;
133 default: 157 default:
134 NOTREACHED(); 158 NOTREACHED();
135 } 159 }
136 } 160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698