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

Side by Side Diff: chrome/browser/infobars/infobar_container.cc

Issue 12386019: Instant: Use only one hidden WebContents per profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 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 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 // TODO(pkasting): Port Mac to use this. 7 // TODO(pkasting): Port Mac to use this.
8 #if defined(TOOLKIT_VIEWS) || defined(TOOLKIT_GTK) 8 #if defined(TOOLKIT_VIEWS) || defined(TOOLKIT_GTK)
9 9
10 #include "chrome/browser/infobars/infobar_container.h" 10 #include "chrome/browser/infobars/infobar_container.h"
11 11
12 #include <algorithm> 12 #include <algorithm>
13 13
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "chrome/browser/api/infobars/infobar_delegate.h" 15 #include "chrome/browser/api/infobars/infobar_delegate.h"
16 #include "chrome/browser/api/infobars/infobar_service.h" 16 #include "chrome/browser/api/infobars/infobar_service.h"
17 #include "chrome/browser/infobars/infobar.h" 17 #include "chrome/browser/infobars/infobar.h"
18 #include "chrome/browser/instant/instant_overlay_model.h"
19 #include "chrome/browser/ui/search/search_model.h" 18 #include "chrome/browser/ui/search/search_model.h"
20 #include "chrome/common/chrome_notification_types.h" 19 #include "chrome/common/chrome_notification_types.h"
21 #include "content/public/browser/notification_details.h" 20 #include "content/public/browser/notification_details.h"
22 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
23 #include "ui/base/animation/slide_animation.h" 22 #include "ui/base/animation/slide_animation.h"
24 23
25 InfoBarContainer::Delegate::~Delegate() { 24 InfoBarContainer::Delegate::~Delegate() {
26 } 25 }
27 26
28 InfoBarContainer::InfoBarContainer( 27 InfoBarContainer::InfoBarContainer(
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 113 }
115 114
116 void InfoBarContainer::RemoveInfoBar(InfoBar* infobar) { 115 void InfoBarContainer::RemoveInfoBar(InfoBar* infobar) {
117 infobar->set_container(NULL); 116 infobar->set_container(NULL);
118 InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar)); 117 InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar));
119 DCHECK(i != infobars_.end()); 118 DCHECK(i != infobars_.end());
120 PlatformSpecificRemoveInfoBar(infobar); 119 PlatformSpecificRemoveInfoBar(infobar);
121 infobars_.erase(i); 120 infobars_.erase(i);
122 } 121 }
123 122
123 void InfoBarContainer::InstantOverlayShown() {
124 // Suggestions are being shown on a |DEFAULT| page. Hide the infobars now.
125 // See comments for ModeChanged() for explanation.
126 HideAllInfoBars();
127 OnInfoBarStateChanged(false);
128 }
129
124 void InfoBarContainer::RemoveAllInfoBarsForDestruction() { 130 void InfoBarContainer::RemoveAllInfoBarsForDestruction() {
125 // Before we remove any children, we reset |delegate_|, so that no removals 131 // Before we remove any children, we reset |delegate_|, so that no removals
126 // will result in us trying to call 132 // will result in us trying to call
127 // delegate_->InfoBarContainerStateChanged(). This is important because at 133 // delegate_->InfoBarContainerStateChanged(). This is important because at
128 // this point |delegate_| may be shutting down, and it's at best unimportant 134 // this point |delegate_| may be shutting down, and it's at best unimportant
129 // and at worst disastrous to call that. 135 // and at worst disastrous to call that.
130 delegate_ = NULL; 136 delegate_ = NULL;
131 137
132 for (size_t i = infobars_.size(); i > 0; --i) 138 for (size_t i = infobars_.size(); i > 0; --i)
133 infobars_[i - 1]->CloseSoon(); 139 infobars_[i - 1]->CloseSoon();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 NOTREACHED(); 178 NOTREACHED();
173 break; 179 break;
174 } 180 }
175 } 181 }
176 182
177 void InfoBarContainer::ModeChanged(const chrome::search::Mode& old_mode, 183 void InfoBarContainer::ModeChanged(const chrome::search::Mode& old_mode,
178 const chrome::search::Mode& new_mode) { 184 const chrome::search::Mode& new_mode) {
179 // Hide infobars when showing Instant Extended suggestions. 185 // Hide infobars when showing Instant Extended suggestions.
180 if (new_mode.is_search_suggestions()) { 186 if (new_mode.is_search_suggestions()) {
181 // If suggestions are being shown on a |DEFAULT| page, delay the hiding 187 // If suggestions are being shown on a |DEFAULT| page, delay the hiding
182 // until notification that Instant overlay is ready is received via 188 // until a notification that the Instant overlay is ready is received via
183 // OverlayStateChanged(); this prevents jankiness caused by infobars hiding 189 // InstantOverlayShown(); this prevents jankiness caused by infobars hiding
184 // followed by suggestions appearing. 190 // followed by suggestions appearing.
185 if (new_mode.is_origin_default()) 191 if (new_mode.is_origin_default())
186 return; 192 return;
187 HideAllInfoBars(); 193 HideAllInfoBars();
188 OnInfoBarStateChanged(false); 194 OnInfoBarStateChanged(false);
189 } else { 195 } else {
190 ChangeInfoBarService(infobar_service_); 196 ChangeInfoBarService(infobar_service_);
191 infobars_shown_time_ = base::TimeTicks::Now(); 197 infobars_shown_time_ = base::TimeTicks::Now();
192 } 198 }
193 } 199 }
194 200
195 void InfoBarContainer::OverlayStateChanged(const InstantOverlayModel& model) {
196 // If suggestions are being shown on a |DEFAULT| page, hide the infobars now.
197 // See comments for ModeChanged() for explanation.
198 if (model.mode().is_search_suggestions() &&
199 model.mode().is_origin_default()) {
200 HideAllInfoBars();
201 OnInfoBarStateChanged(false);
202 }
203 }
204
205 size_t InfoBarContainer::HideInfoBar(InfoBarDelegate* delegate, 201 size_t InfoBarContainer::HideInfoBar(InfoBarDelegate* delegate,
206 bool use_animation) { 202 bool use_animation) {
207 bool should_animate = use_animation && 203 bool should_animate = use_animation &&
208 ((base::TimeTicks::Now() - infobars_shown_time_) > 204 ((base::TimeTicks::Now() - infobars_shown_time_) >
209 base::TimeDelta::FromMilliseconds(50)); 205 base::TimeDelta::FromMilliseconds(50));
210 206
211 // Search for the infobar associated with |delegate|. We cannot search for 207 // Search for the infobar associated with |delegate|. We cannot search for
212 // |delegate| in |tab_helper_|, because an InfoBar remains alive until its 208 // |delegate| in |tab_helper_|, because an InfoBar remains alive until its
213 // close animation completes, while the delegate is removed from the tab 209 // close animation completes, while the delegate is removed from the tab
214 // immediately. 210 // immediately.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 return InfoBar::kDefaultArrowTargetHeight; 267 return InfoBar::kDefaultArrowTargetHeight;
272 // When the first infobar is animating closed, we animate the second infobar's 268 // When the first infobar is animating closed, we animate the second infobar's
273 // arrow target height from the default to the top target height. Note that 269 // arrow target height from the default to the top target height. Note that
274 // the animation values here are going from 1.0 -> 0.0 as the top bar closes. 270 // the animation values here are going from 1.0 -> 0.0 as the top bar closes.
275 return top_arrow_target_height_ + static_cast<int>( 271 return top_arrow_target_height_ + static_cast<int>(
276 (InfoBar::kDefaultArrowTargetHeight - top_arrow_target_height_) * 272 (InfoBar::kDefaultArrowTargetHeight - top_arrow_target_height_) *
277 first_infobar_animation.GetCurrentValue()); 273 first_infobar_animation.GetCurrentValue());
278 } 274 }
279 275
280 #endif // TOOLKIT_VIEWS || defined(TOOLKIT_GTK) 276 #endif // TOOLKIT_VIEWS || defined(TOOLKIT_GTK)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698