| 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/alternate_nav_url_fetcher.h" | 5 #include "chrome/browser/alternate_nav_url_fetcher.h" |
| 6 | 6 |
| 7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
| 8 #include "chrome/browser/infobars/infobar_tab_helper.h" | 8 #include "chrome/browser/infobars/infobar_tab_helper.h" |
| 9 #include "chrome/browser/intranet_redirect_detector.h" | 9 #include "chrome/browser/intranet_redirect_detector.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 154 |
| 155 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: | 155 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: |
| 156 // The page was navigated, we can show the infobar now if necessary. | 156 // The page was navigated, we can show the infobar now if necessary. |
| 157 registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 157 registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 158 content::Source<NavigationController>(controller_)); | 158 content::Source<NavigationController>(controller_)); |
| 159 navigated_to_entry_ = true; | 159 navigated_to_entry_ = true; |
| 160 ShowInfobarIfPossible(); | 160 ShowInfobarIfPossible(); |
| 161 // WARNING: |this| may be deleted! | 161 // WARNING: |this| may be deleted! |
| 162 break; | 162 break; |
| 163 | 163 |
| 164 case content::NOTIFICATION_TAB_CLOSED: | 164 case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: |
| 165 // We have been closed. In order to prevent the URLFetcher from trying to | 165 // We have been closed. In order to prevent the URLFetcher from trying to |
| 166 // access the controller that will be invalid, we delete ourselves. | 166 // access the controller that will be invalid, we delete ourselves. |
| 167 // This deletes the URLFetcher and insures its callback won't be called. | 167 // This deletes the URLFetcher and insures its callback won't be called. |
| 168 delete this; | 168 delete this; |
| 169 break; | 169 break; |
| 170 | 170 |
| 171 default: | 171 default: |
| 172 NOTREACHED(); | 172 NOTREACHED(); |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 | 175 |
| 176 void AlternateNavURLFetcher::OnURLFetchComplete( | 176 void AlternateNavURLFetcher::OnURLFetchComplete( |
| 177 const content::URLFetcher* source) { | 177 const content::URLFetcher* source) { |
| 178 DCHECK_EQ(fetcher_.get(), source); | 178 DCHECK_EQ(fetcher_.get(), source); |
| 179 SetStatusFromURLFetch( | 179 SetStatusFromURLFetch( |
| 180 source->GetURL(), source->GetStatus(), source->GetResponseCode()); | 180 source->GetURL(), source->GetStatus(), source->GetResponseCode()); |
| 181 ShowInfobarIfPossible(); | 181 ShowInfobarIfPossible(); |
| 182 // WARNING: |this| may be deleted! | 182 // WARNING: |this| may be deleted! |
| 183 } | 183 } |
| 184 | 184 |
| 185 void AlternateNavURLFetcher::StartFetch(NavigationController* controller) { | 185 void AlternateNavURLFetcher::StartFetch(NavigationController* controller) { |
| 186 controller_ = controller; | 186 controller_ = controller; |
| 187 registrar_.Add(this, content::NOTIFICATION_TAB_CLOSED, | 187 registrar_.Add( |
| 188 content::Source<NavigationController>(controller_)); | 188 this, |
| 189 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
| 190 content::Source<content::WebContents>(controller_->GetWebContents())); |
| 189 | 191 |
| 190 DCHECK_EQ(NOT_STARTED, state_); | 192 DCHECK_EQ(NOT_STARTED, state_); |
| 191 state_ = IN_PROGRESS; | 193 state_ = IN_PROGRESS; |
| 192 fetcher_.reset(content::URLFetcher::Create( | 194 fetcher_.reset(content::URLFetcher::Create( |
| 193 GURL(alternate_nav_url_), content::URLFetcher::HEAD, this)); | 195 GURL(alternate_nav_url_), content::URLFetcher::HEAD, this)); |
| 194 fetcher_->SetRequestContext( | 196 fetcher_->SetRequestContext( |
| 195 controller_->GetBrowserContext()->GetRequestContext()); | 197 controller_->GetBrowserContext()->GetRequestContext()); |
| 196 | 198 |
| 197 content::WebContents* web_contents = controller_->GetWebContents(); | 199 content::WebContents* web_contents = controller_->GetWebContents(); |
| 198 fetcher_->AssociateWithRenderView( | 200 fetcher_->AssociateWithRenderView( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 return; | 236 return; |
| 235 } | 237 } |
| 236 | 238 |
| 237 InfoBarTabHelper* infobar_helper = | 239 InfoBarTabHelper* infobar_helper = |
| 238 TabContentsWrapper::GetCurrentWrapperForContents( | 240 TabContentsWrapper::GetCurrentWrapperForContents( |
| 239 controller_->GetWebContents())->infobar_tab_helper(); | 241 controller_->GetWebContents())->infobar_tab_helper(); |
| 240 infobar_helper->AddInfoBar( | 242 infobar_helper->AddInfoBar( |
| 241 new AlternateNavInfoBarDelegate(infobar_helper, alternate_nav_url_)); | 243 new AlternateNavInfoBarDelegate(infobar_helper, alternate_nav_url_)); |
| 242 delete this; | 244 delete this; |
| 243 } | 245 } |
| OLD | NEW |