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

Side by Side Diff: chrome/browser/sessions/persistent_tab_restore_service.cc

Issue 1331173002: Eliminate BaseSessionServiceDelegateImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@persistent_tab_restore_service_client
Patch Set: Created 5 years, 3 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/sessions/persistent_tab_restore_service.h" 5 #include "chrome/browser/sessions/persistent_tab_restore_service.h"
6 6
7 #include <cstring> // memcpy 7 #include <cstring> // memcpy
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/scoped_vector.h" 16 #include "base/memory/scoped_vector.h"
17 #include "base/stl_util.h" 17 #include "base/stl_util.h"
18 #include "base/task/cancelable_task_tracker.h" 18 #include "base/task/cancelable_task_tracker.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "chrome/browser/sessions/base_session_service_delegate_impl.h"
21 #include "components/sessions/base_session_service.h" 20 #include "components/sessions/base_session_service.h"
22 #include "components/sessions/base_session_service_commands.h" 21 #include "components/sessions/base_session_service_commands.h"
22 #include "components/sessions/base_session_service_delegate.h"
23 #include "components/sessions/core/session_constants.h" 23 #include "components/sessions/core/session_constants.h"
24 #include "components/sessions/session_command.h" 24 #include "components/sessions/session_command.h"
25 #include "content/public/browser/session_storage_namespace.h" 25 #include "content/public/browser/session_storage_namespace.h"
26 26
27 namespace { 27 namespace {
28 28
29 // Only written if the tab is pinned. 29 // Only written if the tab is pinned.
30 typedef bool PinnedStatePayload; 30 typedef bool PinnedStatePayload;
31 31
32 typedef int32 RestoredEntryPayload; 32 typedef int32 RestoredEntryPayload;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // everything. 105 // everything.
106 const int kEntriesPerReset = 40; 106 const int kEntriesPerReset = 40;
107 107
108 const size_t kMaxEntries = TabRestoreServiceHelper::kMaxEntries; 108 const size_t kMaxEntries = TabRestoreServiceHelper::kMaxEntries;
109 109
110 } // namespace 110 } // namespace
111 111
112 // PersistentTabRestoreService::Delegate --------------------------------------- 112 // PersistentTabRestoreService::Delegate ---------------------------------------
113 113
114 // This restore service will create and own a BaseSessionService and implement 114 // This restore service will create and own a BaseSessionService and implement
115 // the required BaseSessionServiceDelegateImpl. 115 // the required sessions::BaseSessionServiceDelegate.
116 class PersistentTabRestoreService::Delegate 116 class PersistentTabRestoreService::Delegate
117 : public BaseSessionServiceDelegateImpl, 117 : public sessions::BaseSessionServiceDelegate,
118 public TabRestoreServiceHelper::Observer { 118 public TabRestoreServiceHelper::Observer {
119 public: 119 public:
120 explicit Delegate(sessions::TabRestoreServiceClient* client); 120 explicit Delegate(sessions::TabRestoreServiceClient* client);
121 121
122 ~Delegate() override; 122 ~Delegate() override;
123 123
124 // BaseSessionServiceDelegateImpl: 124 // sessions::BaseSessionServiceDelegate:
125 base::SequencedWorkerPool* GetBlockingPool() override;
126 bool ShouldUseDelayedSave() override;
125 void OnWillSaveCommands() override; 127 void OnWillSaveCommands() override;
126 128
127 // TabRestoreServiceHelper::Observer: 129 // TabRestoreServiceHelper::Observer:
128 void OnClearEntries() override; 130 void OnClearEntries() override;
129 void OnRestoreEntryById(SessionID::id_type id, 131 void OnRestoreEntryById(SessionID::id_type id,
130 Entries::const_iterator entry_iterator) override; 132 Entries::const_iterator entry_iterator) override;
131 void OnAddEntry() override; 133 void OnAddEntry() override;
132 134
133 void set_tab_restore_service_helper( 135 void set_tab_restore_service_helper(
134 TabRestoreServiceHelper* tab_restore_service_helper) { 136 TabRestoreServiceHelper* tab_restore_service_helper) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 void LoadStateChanged(); 215 void LoadStateChanged();
214 216
215 // If |id_to_entry| contains an entry for |id| the corresponding entry is 217 // If |id_to_entry| contains an entry for |id| the corresponding entry is
216 // deleted and removed from both |id_to_entry| and |entries|. This is used 218 // deleted and removed from both |id_to_entry| and |entries|. This is used
217 // when creating entries from the backend file. 219 // when creating entries from the backend file.
218 void RemoveEntryByID(SessionID::id_type id, 220 void RemoveEntryByID(SessionID::id_type id,
219 IDToEntry* id_to_entry, 221 IDToEntry* id_to_entry,
220 std::vector<TabRestoreService::Entry*>* entries); 222 std::vector<TabRestoreService::Entry*>* entries);
221 223
222 private: 224 private:
223 scoped_ptr<sessions::BaseSessionService> base_session_service_;
224
225 // The associated client. 225 // The associated client.
226 sessions::TabRestoreServiceClient* client_; 226 sessions::TabRestoreServiceClient* client_;
227 227
228 scoped_ptr<sessions::BaseSessionService> base_session_service_;
229
228 TabRestoreServiceHelper* tab_restore_service_helper_; 230 TabRestoreServiceHelper* tab_restore_service_helper_;
229 231
230 // The number of entries to write. 232 // The number of entries to write.
231 int entries_to_write_; 233 int entries_to_write_;
232 234
233 // Number of entries we've written. 235 // Number of entries we've written.
234 int entries_written_; 236 int entries_written_;
235 237
236 // Whether we've loaded the last session. 238 // Whether we've loaded the last session.
237 int load_state_; 239 int load_state_;
238 240
239 // Results from previously closed tabs/sessions is first added here. When the 241 // Results from previously closed tabs/sessions is first added here. When the
240 // results from both us and the session restore service have finished loading 242 // results from both us and the session restore service have finished loading
241 // LoadStateChanged is invoked, which adds these entries to entries_. 243 // LoadStateChanged is invoked, which adds these entries to entries_.
242 ScopedVector<Entry> staging_entries_; 244 ScopedVector<Entry> staging_entries_;
243 245
244 // Used when loading previous tabs/session and open tabs/session. 246 // Used when loading previous tabs/session and open tabs/session.
245 base::CancelableTaskTracker cancelable_task_tracker_; 247 base::CancelableTaskTracker cancelable_task_tracker_;
246 248
247 DISALLOW_COPY_AND_ASSIGN(Delegate); 249 DISALLOW_COPY_AND_ASSIGN(Delegate);
248 }; 250 };
249 251
250 PersistentTabRestoreService::Delegate::Delegate( 252 PersistentTabRestoreService::Delegate::Delegate(
251 sessions::TabRestoreServiceClient* client) 253 sessions::TabRestoreServiceClient* client)
252 : BaseSessionServiceDelegateImpl(true), 254 : client_(client),
253 base_session_service_(new sessions::BaseSessionService( 255 base_session_service_(new sessions::BaseSessionService(
254 sessions::BaseSessionService::TAB_RESTORE, 256 sessions::BaseSessionService::TAB_RESTORE,
255 client->GetPathToSaveTo(), 257 client_->GetPathToSaveTo(),
256 this)), 258 this)),
257 client_(client),
258 tab_restore_service_helper_(NULL), 259 tab_restore_service_helper_(NULL),
259 entries_to_write_(0), 260 entries_to_write_(0),
260 entries_written_(0), 261 entries_written_(0),
261 load_state_(NOT_LOADED) {} 262 load_state_(NOT_LOADED) {}
262 263
263 PersistentTabRestoreService::Delegate::~Delegate() {} 264 PersistentTabRestoreService::Delegate::~Delegate() {}
264 265
266 base::SequencedWorkerPool*
267 PersistentTabRestoreService::Delegate::GetBlockingPool() {
268 return client_->GetBlockingPool();
269 }
270
271 bool PersistentTabRestoreService::Delegate::ShouldUseDelayedSave() {
272 return true;
273 }
274
265 void PersistentTabRestoreService::Delegate::OnWillSaveCommands() { 275 void PersistentTabRestoreService::Delegate::OnWillSaveCommands() {
266 const Entries& entries = tab_restore_service_helper_->entries(); 276 const Entries& entries = tab_restore_service_helper_->entries();
267 int to_write_count = std::min(entries_to_write_, 277 int to_write_count = std::min(entries_to_write_,
268 static_cast<int>(entries.size())); 278 static_cast<int>(entries.size()));
269 entries_to_write_ = 0; 279 entries_to_write_ = 0;
270 if (entries_written_ + to_write_count > kEntriesPerReset) { 280 if (entries_written_ + to_write_count > kEntriesPerReset) {
271 to_write_count = entries.size(); 281 to_write_count = entries.size();
272 base_session_service_->set_pending_reset(true); 282 base_session_service_->set_pending_reset(true);
273 } 283 }
274 if (to_write_count) { 284 if (to_write_count) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 tab.navigations; 437 tab.navigations;
428 int max_index = static_cast<int>(navigations.size()); 438 int max_index = static_cast<int>(navigations.size());
429 439
430 // Determine the first navigation we'll persist. 440 // Determine the first navigation we'll persist.
431 int valid_count_before_selected = 0; 441 int valid_count_before_selected = 0;
432 int first_index_to_persist = selected_index; 442 int first_index_to_persist = selected_index;
433 for (int i = selected_index - 1; 443 for (int i = selected_index - 1;
434 i >= 0 && 444 i >= 0 &&
435 valid_count_before_selected < sessions::gMaxPersistNavigationCount; 445 valid_count_before_selected < sessions::gMaxPersistNavigationCount;
436 --i) { 446 --i) {
437 if (ShouldTrackEntry(navigations[i].virtual_url())) { 447 if (client_->ShouldTrackEntry(navigations[i].virtual_url())) {
438 first_index_to_persist = i; 448 first_index_to_persist = i;
439 valid_count_before_selected++; 449 valid_count_before_selected++;
440 } 450 }
441 } 451 }
442 452
443 // Write the command that identifies the selected tab. 453 // Write the command that identifies the selected tab.
444 base_session_service_->ScheduleCommand( 454 base_session_service_->ScheduleCommand(
445 CreateSelectedNavigationInTabCommand(tab.id, 455 CreateSelectedNavigationInTabCommand(tab.id,
446 valid_count_before_selected, 456 valid_count_before_selected,
447 tab.timestamp).Pass()); 457 tab.timestamp).Pass());
(...skipping 19 matching lines...) Expand all
467 sessions::CreateSetTabUserAgentOverrideCommand( 477 sessions::CreateSetTabUserAgentOverrideCommand(
468 kCommandSetTabUserAgentOverride, 478 kCommandSetTabUserAgentOverride,
469 tab.id, 479 tab.id,
470 tab.user_agent_override).Pass()); 480 tab.user_agent_override).Pass());
471 } 481 }
472 482
473 // Then write the navigations. 483 // Then write the navigations.
474 for (int i = first_index_to_persist, wrote_count = 0; 484 for (int i = first_index_to_persist, wrote_count = 0;
475 wrote_count < 2 * sessions::gMaxPersistNavigationCount && i < max_index; 485 wrote_count < 2 * sessions::gMaxPersistNavigationCount && i < max_index;
476 ++i) { 486 ++i) {
477 if (ShouldTrackEntry(navigations[i].virtual_url())) { 487 if (client_->ShouldTrackEntry(navigations[i].virtual_url())) {
478 base_session_service_->ScheduleCommand( 488 base_session_service_->ScheduleCommand(
479 CreateUpdateTabNavigationCommand(kCommandUpdateTabNavigation, 489 CreateUpdateTabNavigationCommand(kCommandUpdateTabNavigation,
480 tab.id, 490 tab.id,
481 navigations[i])); 491 navigations[i]));
482 } 492 }
483 } 493 }
484 } 494 }
485 495
486 // static 496 // static
487 scoped_ptr<sessions::SessionCommand> 497 scoped_ptr<sessions::SessionCommand>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 } 544 }
535 545
536 int PersistentTabRestoreService::Delegate::GetSelectedNavigationIndexToPersist( 546 int PersistentTabRestoreService::Delegate::GetSelectedNavigationIndexToPersist(
537 const Tab& tab) { 547 const Tab& tab) {
538 const std::vector<sessions::SerializedNavigationEntry>& navigations = 548 const std::vector<sessions::SerializedNavigationEntry>& navigations =
539 tab.navigations; 549 tab.navigations;
540 int selected_index = tab.current_navigation_index; 550 int selected_index = tab.current_navigation_index;
541 int max_index = static_cast<int>(navigations.size()); 551 int max_index = static_cast<int>(navigations.size());
542 552
543 // Find the first navigation to persist. We won't persist the selected 553 // Find the first navigation to persist. We won't persist the selected
544 // navigation if ShouldTrackEntry returns false. 554 // navigation if client_->ShouldTrackEntry returns false.
545 while (selected_index >= 0 && 555 while (
546 !ShouldTrackEntry(navigations[selected_index].virtual_url())) { 556 selected_index >= 0 &&
557 !client_->ShouldTrackEntry(navigations[selected_index].virtual_url())) {
547 selected_index--; 558 selected_index--;
548 } 559 }
549 560
550 if (selected_index != -1) 561 if (selected_index != -1)
551 return selected_index; 562 return selected_index;
552 563
553 // Couldn't find a navigation to persist going back, go forward. 564 // Couldn't find a navigation to persist going back, go forward.
554 selected_index = tab.current_navigation_index + 1; 565 selected_index = tab.current_navigation_index + 1;
555 while (selected_index < max_index && 566 while (
556 !ShouldTrackEntry(navigations[selected_index].virtual_url())) { 567 selected_index < max_index &&
568 !client_->ShouldTrackEntry(navigations[selected_index].virtual_url())) {
557 selected_index++; 569 selected_index++;
558 } 570 }
559 571
560 return (selected_index == max_index) ? -1 : selected_index; 572 return (selected_index == max_index) ? -1 : selected_index;
561 } 573 }
562 574
563 void PersistentTabRestoreService::Delegate::OnGotLastSessionCommands( 575 void PersistentTabRestoreService::Delegate::OnGotLastSessionCommands(
564 ScopedVector<sessions::SessionCommand> commands) { 576 ScopedVector<sessions::SessionCommand> commands) {
565 std::vector<Entry*> entries; 577 std::vector<Entry*> entries;
566 CreateEntriesFromCommands(commands.get(), &entries); 578 CreateEntriesFromCommands(commands.get(), &entries);
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 delegate_->LoadTabsFromLastSession(); 1008 delegate_->LoadTabsFromLastSession();
997 } 1009 }
998 1010
999 TabRestoreService::Entries* PersistentTabRestoreService::mutable_entries() { 1011 TabRestoreService::Entries* PersistentTabRestoreService::mutable_entries() {
1000 return &helper_.entries_; 1012 return &helper_.entries_;
1001 } 1013 }
1002 1014
1003 void PersistentTabRestoreService::PruneEntries() { 1015 void PersistentTabRestoreService::PruneEntries() {
1004 helper_.PruneEntries(); 1016 helper_.PruneEntries();
1005 } 1017 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698