OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/session_restore.h" | 5 #include "chrome/browser/sessions/session_restore.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // Invoked when done with creating all the tabs/browsers. | 221 // Invoked when done with creating all the tabs/browsers. |
222 // | 222 // |
223 // |created_tabbed_browser| indicates whether a tabbed browser was created, | 223 // |created_tabbed_browser| indicates whether a tabbed browser was created, |
224 // or we used an existing tabbed browser. | 224 // or we used an existing tabbed browser. |
225 // | 225 // |
226 // If successful, this begins loading tabs and deletes itself when all tabs | 226 // If successful, this begins loading tabs and deletes itself when all tabs |
227 // have been loaded. | 227 // have been loaded. |
228 void FinishedTabCreation(bool succeeded, bool created_tabbed_browser) { | 228 void FinishedTabCreation(bool succeeded, bool created_tabbed_browser) { |
229 if (!created_tabbed_browser && always_create_tabbed_browser_) { | 229 if (!created_tabbed_browser && always_create_tabbed_browser_) { |
230 Browser* browser = Browser::Create(profile_); | 230 Browser* browser = Browser::Create(profile_); |
231 // Honor --pinned-tab-count if we're synchronous (which means we're run | |
232 // during startup) and the user specified urls on the command line. | |
233 bool honor_pin_tabs = synchronous_ && !urls_to_open_.empty(); | |
234 if (urls_to_open_.empty()) { | 231 if (urls_to_open_.empty()) { |
235 // No tab browsers were created and no URLs were supplied on the command | 232 // No tab browsers were created and no URLs were supplied on the command |
236 // line. Add an empty URL, which is treated as opening the users home | 233 // line. Add an empty URL, which is treated as opening the users home |
237 // page. | 234 // page. |
238 urls_to_open_.push_back(GURL()); | 235 urls_to_open_.push_back(GURL()); |
239 } | 236 } |
240 AppendURLsToBrowser(browser, urls_to_open_, honor_pin_tabs); | 237 AppendURLsToBrowser(browser, urls_to_open_); |
241 browser->window()->Show(); | 238 browser->window()->Show(); |
242 } | 239 } |
243 | 240 |
244 if (succeeded) { | 241 if (succeeded) { |
245 DCHECK(tab_loader_.get()); | 242 DCHECK(tab_loader_.get()); |
246 // TabLoader delets itself when done loading. | 243 // TabLoader delets itself when done loading. |
247 tab_loader_.release()->LoadTabs(); | 244 tab_loader_.release()->LoadTabs(); |
248 } | 245 } |
249 | 246 |
250 if (!synchronous_) { | 247 if (!synchronous_) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 } | 311 } |
315 | 312 |
316 // If we're restoring a session as the result of a crash and the session | 313 // If we're restoring a session as the result of a crash and the session |
317 // included at least one tabbed browser, then close the browser window | 314 // included at least one tabbed browser, then close the browser window |
318 // that was opened when the user clicked to restore the session. | 315 // that was opened when the user clicked to restore the session. |
319 if (clobber_existing_window_ && current_browser && has_tabbed_browser && | 316 if (clobber_existing_window_ && current_browser && has_tabbed_browser && |
320 current_browser->type() == Browser::TYPE_NORMAL) { | 317 current_browser->type() == Browser::TYPE_NORMAL) { |
321 current_browser->CloseAllTabs(); | 318 current_browser->CloseAllTabs(); |
322 } | 319 } |
323 if (last_browser && !urls_to_open_.empty()) | 320 if (last_browser && !urls_to_open_.empty()) |
324 AppendURLsToBrowser(last_browser, urls_to_open_, false); | 321 AppendURLsToBrowser(last_browser, urls_to_open_); |
325 // If last_browser is NULL and urls_to_open_ is non-empty, | 322 // If last_browser is NULL and urls_to_open_ is non-empty, |
326 // FinishedTabCreation will create a new TabbedBrowser and add the urls to | 323 // FinishedTabCreation will create a new TabbedBrowser and add the urls to |
327 // it. | 324 // it. |
328 FinishedTabCreation(true, has_tabbed_browser); | 325 FinishedTabCreation(true, has_tabbed_browser); |
329 } | 326 } |
330 | 327 |
331 void RestoreTabsToBrowser(const SessionWindow& window, Browser* browser) { | 328 void RestoreTabsToBrowser(const SessionWindow& window, Browser* browser) { |
332 DCHECK(!window.tabs.empty()); | 329 DCHECK(!window.tabs.empty()); |
333 for (std::vector<SessionTab*>::const_iterator i = window.tabs.begin(); | 330 for (std::vector<SessionTab*>::const_iterator i = window.tabs.begin(); |
334 i != window.tabs.end(); ++i) { | 331 i != window.tabs.end(); ++i) { |
(...skipping 26 matching lines...) Expand all Loading... |
361 DCHECK(browser->tab_count()); | 358 DCHECK(browser->tab_count()); |
362 browser->SelectTabContentsAt( | 359 browser->SelectTabContentsAt( |
363 std::min(initial_tab_count + std::max(0, selected_session_index), | 360 std::min(initial_tab_count + std::max(0, selected_session_index), |
364 browser->tab_count() - 1), true); | 361 browser->tab_count() - 1), true); |
365 browser->window()->Show(); | 362 browser->window()->Show(); |
366 // TODO(jcampan): http://crbug.com/8123 we should not need to set the | 363 // TODO(jcampan): http://crbug.com/8123 we should not need to set the |
367 // initial focus explicitly. | 364 // initial focus explicitly. |
368 browser->GetSelectedTabContents()->view()->SetInitialFocus(); | 365 browser->GetSelectedTabContents()->view()->SetInitialFocus(); |
369 } | 366 } |
370 | 367 |
371 // Appends the urls in |urls| to |browser|. If |pin_tabs| is true the first n | 368 // Appends the urls in |urls| to |browser|. |
372 // tabs are pinned, where n is the command line value for --pinned-tab-count. | |
373 void AppendURLsToBrowser(Browser* browser, | 369 void AppendURLsToBrowser(Browser* browser, |
374 const std::vector<GURL>& urls, | 370 const std::vector<GURL>& urls) { |
375 bool pin_tabs) { | |
376 int pin_count = 0; | |
377 if (pin_tabs) { | |
378 std::string pin_count_string = | |
379 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | |
380 switches::kPinnedTabCount); | |
381 if (!pin_count_string.empty()) | |
382 pin_count = StringToInt(pin_count_string); | |
383 } | |
384 | |
385 for (size_t i = 0; i < urls.size(); ++i) { | 371 for (size_t i = 0; i < urls.size(); ++i) { |
386 browser->AddTabWithURL(urls[i], GURL(), PageTransition::START_PAGE, | 372 browser->AddTabWithURL(urls[i], GURL(), PageTransition::START_PAGE, |
387 (i == 0), -1, false, NULL); | 373 (i == 0), -1, false, NULL); |
388 if (i < static_cast<size_t>(pin_count)) { | |
389 browser->tabstrip_model()->SetTabPinned(browser->tab_count() - 1, | |
390 true); | |
391 } | |
392 } | 374 } |
393 } | 375 } |
394 | 376 |
395 // Invokes TabRestored on the SessionService for all tabs in browser after | 377 // Invokes TabRestored on the SessionService for all tabs in browser after |
396 // initial_count. | 378 // initial_count. |
397 void NotifySessionServiceOfRestoredTabs(Browser* browser, int initial_count) { | 379 void NotifySessionServiceOfRestoredTabs(Browser* browser, int initial_count) { |
398 SessionService* session_service = profile_->GetSessionService(); | 380 SessionService* session_service = profile_->GetSessionService(); |
399 for (int i = initial_count; i < browser->tab_count(); ++i) | 381 for (int i = initial_count; i < browser->tab_count(); ++i) |
400 session_service->TabRestored(&browser->GetTabContentsAt(i)->controller(), | 382 session_service->TabRestored(&browser->GetTabContentsAt(i)->controller(), |
401 browser->tabstrip_model()->IsTabPinned(i)); | 383 browser->tabstrip_model()->IsTabPinned(i)); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 Restore(profile, browser, false, clobber_existing_window, | 457 Restore(profile, browser, false, clobber_existing_window, |
476 always_create_tabbed_browser, urls_to_open); | 458 always_create_tabbed_browser, urls_to_open); |
477 } | 459 } |
478 | 460 |
479 // static | 461 // static |
480 void SessionRestore::RestoreSessionSynchronously( | 462 void SessionRestore::RestoreSessionSynchronously( |
481 Profile* profile, | 463 Profile* profile, |
482 const std::vector<GURL>& urls_to_open) { | 464 const std::vector<GURL>& urls_to_open) { |
483 Restore(profile, NULL, true, false, true, urls_to_open); | 465 Restore(profile, NULL, true, false, true, urls_to_open); |
484 } | 466 } |
OLD | NEW |