| OLD | NEW |
| 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/startup/session_crashed_prompt.h" | 5 #include "chrome/browser/ui/startup/session_crashed_prompt.h" |
| 6 | 6 |
| 7 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" | 7 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
| 8 #include "chrome/browser/infobars/infobar_tab_helper.h" | 8 #include "chrome/browser/infobars/infobar_tab_helper.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
| 10 #include "chrome/browser/sessions/session_restore.h" | 10 #include "chrome/browser/sessions/session_restore.h" |
| 11 #include "chrome/browser/ui/browser.h" | 11 #include "chrome/browser/ui/browser.h" |
| 12 #include "chrome/browser/ui/browser_finder.h" | 12 #include "chrome/browser/ui/browser_finder.h" |
| 13 #include "chrome/browser/ui/browser_tabstrip.h" | 13 #include "chrome/browser/ui/browser_tabstrip.h" |
| 14 #include "chrome/browser/ui/tab_contents/tab_contents.h" | 14 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
| 15 #include "chrome/common/chrome_notification_types.h" | 15 #include "chrome/common/chrome_notification_types.h" |
| 16 #include "chrome/common/url_constants.h" | 16 #include "chrome/common/url_constants.h" |
| 17 #include "content/public/browser/dom_storage_context.h" | 17 #include "content/public/browser/dom_storage_context.h" |
| 18 #include "content/public/browser/notification_service.h" | 18 #include "content/public/browser/notification_service.h" |
| 19 #include "content/public/browser/storage_partition.h" |
| 19 #include "content/public/browser/web_contents.h" | 20 #include "content/public/browser/web_contents.h" |
| 20 #include "grit/chromium_strings.h" | 21 #include "grit/chromium_strings.h" |
| 21 #include "grit/generated_resources.h" | 22 #include "grit/generated_resources.h" |
| 22 #include "grit/theme_resources.h" | 23 #include "grit/theme_resources.h" |
| 23 #include "ui/base/l10n/l10n_util.h" | 24 #include "ui/base/l10n/l10n_util.h" |
| 24 #include "ui/base/resource/resource_bundle.h" | 25 #include "ui/base/resource/resource_bundle.h" |
| 25 | 26 |
| 26 namespace { | 27 namespace { |
| 27 | 28 |
| 28 // A delegate for the InfoBar shown when the previous session has crashed. | 29 // A delegate for the InfoBar shown when the previous session has crashed. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 // initiate the session storage scavenging only in the destructor. (Currently, | 66 // initiate the session storage scavenging only in the destructor. (Currently, |
| 66 // info bars are leaked if they get closed while they're in background tabs.) | 67 // info bars are leaked if they get closed while they're in background tabs.) |
| 67 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, | 68 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
| 68 content::NotificationService::AllSources()); | 69 content::NotificationService::AllSources()); |
| 69 } | 70 } |
| 70 | 71 |
| 71 SessionCrashedInfoBarDelegate::~SessionCrashedInfoBarDelegate() { | 72 SessionCrashedInfoBarDelegate::~SessionCrashedInfoBarDelegate() { |
| 72 // If the info bar wasn't accepted, it was either dismissed or expired. In | 73 // If the info bar wasn't accepted, it was either dismissed or expired. In |
| 73 // that case, session restore won't happen. | 74 // that case, session restore won't happen. |
| 74 if (!accepted_ && !removed_notification_received_) { | 75 if (!accepted_ && !removed_notification_received_) { |
| 75 content::BrowserContext::GetDefaultDOMStorageContext( | 76 content::BrowserContext::GetDefaultStoragePartition(browser_->profile())-> |
| 76 browser_->profile())->StartScavengingUnusedSessionStorage(); | 77 GetDOMStorageContext()->StartScavengingUnusedSessionStorage(); |
| 77 } | 78 } |
| 78 } | 79 } |
| 79 | 80 |
| 80 gfx::Image* SessionCrashedInfoBarDelegate::GetIcon() const { | 81 gfx::Image* SessionCrashedInfoBarDelegate::GetIcon() const { |
| 81 return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( | 82 return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( |
| 82 IDR_INFOBAR_RESTORE_SESSION); | 83 IDR_INFOBAR_RESTORE_SESSION); |
| 83 } | 84 } |
| 84 | 85 |
| 85 string16 SessionCrashedInfoBarDelegate::GetMessageText() const { | 86 string16 SessionCrashedInfoBarDelegate::GetMessageText() const { |
| 86 return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE); | 87 return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 113 | 114 |
| 114 void SessionCrashedInfoBarDelegate::Observe( | 115 void SessionCrashedInfoBarDelegate::Observe( |
| 115 int type, | 116 int type, |
| 116 const content::NotificationSource& source, | 117 const content::NotificationSource& source, |
| 117 const content::NotificationDetails& details) { | 118 const content::NotificationDetails& details) { |
| 118 DCHECK(type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED); | 119 DCHECK(type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED); |
| 119 if (content::Details<std::pair<InfoBarDelegate*, bool> >(details)->first != | 120 if (content::Details<std::pair<InfoBarDelegate*, bool> >(details)->first != |
| 120 this) | 121 this) |
| 121 return; | 122 return; |
| 122 if (!accepted_) { | 123 if (!accepted_) { |
| 123 content::BrowserContext::GetDefaultDOMStorageContext( | 124 content::BrowserContext::GetDefaultStoragePartition(browser_->profile())-> |
| 124 browser_->profile())->StartScavengingUnusedSessionStorage(); | 125 GetDOMStorageContext()->StartScavengingUnusedSessionStorage(); |
| 125 removed_notification_received_ = true; | 126 removed_notification_received_ = true; |
| 126 } | 127 } |
| 127 } | 128 } |
| 128 | 129 |
| 129 } // namespace | 130 } // namespace |
| 130 | 131 |
| 131 namespace chrome { | 132 namespace chrome { |
| 132 | 133 |
| 133 void ShowSessionCrashedPrompt(Browser* browser) { | 134 void ShowSessionCrashedPrompt(Browser* browser) { |
| 134 // Assume that if the user is launching incognito they were previously | 135 // Assume that if the user is launching incognito they were previously |
| 135 // running incognito so that we have nothing to restore from. | 136 // running incognito so that we have nothing to restore from. |
| 136 if (browser->profile()->IsOffTheRecord()) | 137 if (browser->profile()->IsOffTheRecord()) |
| 137 return; | 138 return; |
| 138 | 139 |
| 139 // In ChromeBot tests, there might be a race. This line appears to get | 140 // In ChromeBot tests, there might be a race. This line appears to get |
| 140 // called during shutdown and |tab| can be NULL. | 141 // called during shutdown and |tab| can be NULL. |
| 141 TabContents* tab = chrome::GetActiveTabContents(browser); | 142 TabContents* tab = chrome::GetActiveTabContents(browser); |
| 142 if (!tab) | 143 if (!tab) |
| 143 return; | 144 return; |
| 144 | 145 |
| 145 // Don't show the info-bar if there are already info-bars showing. | 146 // Don't show the info-bar if there are already info-bars showing. |
| 146 if (tab->infobar_tab_helper()->infobar_count() > 0) | 147 if (tab->infobar_tab_helper()->infobar_count() > 0) |
| 147 return; | 148 return; |
| 148 | 149 |
| 149 tab->infobar_tab_helper()->AddInfoBar( | 150 tab->infobar_tab_helper()->AddInfoBar( |
| 150 new SessionCrashedInfoBarDelegate(tab->infobar_tab_helper())); | 151 new SessionCrashedInfoBarDelegate(tab->infobar_tab_helper())); |
| 151 } | 152 } |
| 152 | 153 |
| 153 } // namespace chrome | 154 } // namespace chrome |
| OLD | NEW |