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

Side by Side Diff: chrome/browser/download/download_request_limiter.cc

Issue 10079023: Move notifications used only in chrome/ out of content/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: six! Created 8 years, 8 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/download/download_request_limiter.h" 5 #include "chrome/browser/download/download_request_limiter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "chrome/browser/download/download_request_infobar_delegate.h" 9 #include "chrome/browser/download/download_request_infobar_delegate.h"
10 #include "chrome/browser/infobars/infobar_tab_helper.h" 10 #include "chrome/browser/infobars/infobar_tab_helper.h"
(...skipping 19 matching lines...) Expand all
30 DownloadRequestLimiter::TabDownloadState::TabDownloadState( 30 DownloadRequestLimiter::TabDownloadState::TabDownloadState(
31 DownloadRequestLimiter* host, 31 DownloadRequestLimiter* host,
32 NavigationController* controller, 32 NavigationController* controller,
33 NavigationController* originating_controller) 33 NavigationController* originating_controller)
34 : host_(host), 34 : host_(host),
35 controller_(controller), 35 controller_(controller),
36 status_(DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD), 36 status_(DownloadRequestLimiter::ALLOW_ONE_DOWNLOAD),
37 download_count_(0), 37 download_count_(0),
38 infobar_(NULL) { 38 infobar_(NULL) {
39 content::Source<NavigationController> notification_source(controller); 39 content::Source<NavigationController> notification_source(controller);
40 content::Source<content::WebContents> web_contents_source(
41 controller->GetWebContents());
40 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_PENDING, 42 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_PENDING,
41 notification_source); 43 notification_source);
42 registrar_.Add(this, content::NOTIFICATION_TAB_CLOSED, notification_source); 44 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
45 web_contents_source);
43 46
44 NavigationEntry* active_entry = originating_controller ? 47 NavigationEntry* active_entry = originating_controller ?
45 originating_controller->GetActiveEntry() : controller->GetActiveEntry(); 48 originating_controller->GetActiveEntry() : controller->GetActiveEntry();
46 if (active_entry) 49 if (active_entry)
47 initial_page_host_ = active_entry->GetURL().host(); 50 initial_page_host_ = active_entry->GetURL().host();
48 } 51 }
49 52
50 DownloadRequestLimiter::TabDownloadState::~TabDownloadState() { 53 DownloadRequestLimiter::TabDownloadState::~TabDownloadState() {
51 // We should only be destroyed after the callbacks have been notified. 54 // We should only be destroyed after the callbacks have been notified.
52 DCHECK(callbacks_.empty()); 55 DCHECK(callbacks_.empty());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } 97 }
95 98
96 void DownloadRequestLimiter::TabDownloadState::Accept() { 99 void DownloadRequestLimiter::TabDownloadState::Accept() {
97 NotifyCallbacks(true); 100 NotifyCallbacks(true);
98 } 101 }
99 102
100 void DownloadRequestLimiter::TabDownloadState::Observe( 103 void DownloadRequestLimiter::TabDownloadState::Observe(
101 int type, 104 int type,
102 const content::NotificationSource& source, 105 const content::NotificationSource& source,
103 const content::NotificationDetails& details) { 106 const content::NotificationDetails& details) {
104 if ((type != content::NOTIFICATION_NAV_ENTRY_PENDING && 107 if (type != content::NOTIFICATION_NAV_ENTRY_PENDING &&
105 type != content::NOTIFICATION_TAB_CLOSED) || 108 type != content::NOTIFICATION_WEB_CONTENTS_DESTROYED) {
109 NOTREACHED();
110 return;
111 }
112 if (type == content::NOTIFICATION_NAV_ENTRY_PENDING &&
106 content::Source<NavigationController>(source).ptr() != controller_) { 113 content::Source<NavigationController>(source).ptr() != controller_) {
107 NOTREACHED(); 114 NOTREACHED();
108 return; 115 return;
109 } 116 }
117 if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED &&
118 &content::Source<content::WebContents>(source).ptr()->
119 GetController() != controller_) {
120 NOTREACHED();
121 return;
122 }
110 123
111 switch (type) { 124 switch (type) {
112 case content::NOTIFICATION_NAV_ENTRY_PENDING: { 125 case content::NOTIFICATION_NAV_ENTRY_PENDING: {
113 // NOTE: resetting state on a pending navigate isn't ideal. In particular 126 // NOTE: resetting state on a pending navigate isn't ideal. In particular
114 // it is possible that queued up downloads for the page before the 127 // it is possible that queued up downloads for the page before the
115 // pending navigate will be delivered to us after we process this 128 // pending navigate will be delivered to us after we process this
116 // request. If this happens we may let a download through that we 129 // request. If this happens we may let a download through that we
117 // shouldn't have. But this is rather rare, and it is difficult to get 130 // shouldn't have. But this is rather rare, and it is difficult to get
118 // 100% right, so we don't deal with it. 131 // 100% right, so we don't deal with it.
119 NavigationEntry* entry = controller_->GetPendingEntry(); 132 NavigationEntry* entry = controller_->GetPendingEntry();
(...skipping 11 matching lines...) Expand all
131 // reset the download state if the user is navigating to a different 144 // reset the download state if the user is navigating to a different
132 // host (or host is empty). 145 // host (or host is empty).
133 if (!initial_page_host_.empty() && !entry->GetURL().host().empty() && 146 if (!initial_page_host_.empty() && !entry->GetURL().host().empty() &&
134 entry->GetURL().host() == initial_page_host_) { 147 entry->GetURL().host() == initial_page_host_) {
135 return; 148 return;
136 } 149 }
137 } 150 }
138 break; 151 break;
139 } 152 }
140 153
141 case content::NOTIFICATION_TAB_CLOSED: 154 case content::NOTIFICATION_WEB_CONTENTS_DESTROYED:
142 // Tab closed, no need to handle closing the dialog as it's owned by the 155 // Tab closed, no need to handle closing the dialog as it's owned by the
143 // TabContents, break so that we get deleted after switch. 156 // TabContents, break so that we get deleted after switch.
144 break; 157 break;
145 158
146 default: 159 default:
147 NOTREACHED(); 160 NOTREACHED();
148 } 161 }
149 162
150 NotifyCallbacks(false); 163 NotifyCallbacks(false);
151 host_->Remove(this); 164 host_->Remove(this);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 349
337 void DownloadRequestLimiter::Remove(TabDownloadState* state) { 350 void DownloadRequestLimiter::Remove(TabDownloadState* state) {
338 DCHECK(ContainsKey(state_map_, state->controller())); 351 DCHECK(ContainsKey(state_map_, state->controller()));
339 state_map_.erase(state->controller()); 352 state_map_.erase(state->controller());
340 delete state; 353 delete state;
341 } 354 }
342 355
343 // static 356 // static
344 DownloadRequestLimiter::TestingDelegate* DownloadRequestLimiter::delegate_ = 357 DownloadRequestLimiter::TestingDelegate* DownloadRequestLimiter::delegate_ =
345 NULL; 358 NULL;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698