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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarContainer.java

Issue 1596713003: Discourage creation of Java infobars without InfoBarDelegates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 package org.chromium.chrome.browser.infobar; 5 package org.chromium.chrome.browser.infobar;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.view.Gravity; 8 import android.view.Gravity;
9 import android.view.ViewGroup; 9 import android.view.ViewGroup;
10 import android.widget.FrameLayout; 10 import android.widget.FrameLayout;
11 11
12 import org.chromium.base.ObserverList; 12 import org.chromium.base.ObserverList;
13 import org.chromium.base.VisibleForTesting; 13 import org.chromium.base.VisibleForTesting;
14 import org.chromium.base.annotations.CalledByNative; 14 import org.chromium.base.annotations.CalledByNative;
15 import org.chromium.chrome.browser.banners.SwipableOverlayView; 15 import org.chromium.chrome.browser.banners.SwipableOverlayView;
16 import org.chromium.chrome.browser.tab.Tab; 16 import org.chromium.chrome.browser.tab.Tab;
17 import org.chromium.chrome.browser.tab.TabObserver;
18 import org.chromium.content.browser.ContentViewCore; 17 import org.chromium.content.browser.ContentViewCore;
19 import org.chromium.content_public.browser.WebContents; 18 import org.chromium.content_public.browser.WebContents;
20 import org.chromium.ui.base.DeviceFormFactor; 19 import org.chromium.ui.base.DeviceFormFactor;
21 20
22 import java.util.ArrayList; 21 import java.util.ArrayList;
23 22
24 23
25 /** 24 /**
26 * A container for all the infobars of a specific tab. 25 * A container for all the infobars of a specific tab.
27 * Note that infobars creation can be initiated from Java of from native code. 26 * Note that infobars creation can be initiated from Java of from native code.
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 * this container. 167 * this container.
169 */ 168 */
170 public void onParentViewChanged(int tabId, ViewGroup parentView) { 169 public void onParentViewChanged(int tabId, ViewGroup parentView) {
171 mTabId = tabId; 170 mTabId = tabId;
172 mParentView = parentView; 171 mParentView = parentView;
173 172
174 removeFromParentView(); 173 removeFromParentView();
175 addToParentView(); 174 addToParentView();
176 } 175 }
177 176
178 @Override
179 protected TabObserver createTabObserver() {
180 return new SwipableOverlayViewTabObserver() {
181 @Override
182 public void onPageLoadStarted(Tab tab, String url) {
183 onPageStarted();
184 }
185 };
186 }
187
188 /** 177 /**
189 * Adds an InfoBar to the view hierarchy. 178 * Adds an InfoBar to the view hierarchy.
190 * @param infoBar InfoBar to add to the View hierarchy. 179 * @param infoBar InfoBar to add to the View hierarchy.
191 */ 180 */
192 @CalledByNative 181 @CalledByNative
193 public void addInfoBar(InfoBar infoBar) { 182 private void addInfoBar(InfoBar infoBar) {
194 assert !mDestroyed; 183 assert !mDestroyed;
195 if (infoBar == null) { 184 if (infoBar == null) {
196 return; 185 return;
197 } 186 }
198 if (mInfoBars.contains(infoBar)) { 187 if (mInfoBars.contains(infoBar)) {
199 assert false : "Trying to add an info bar that has already been adde d."; 188 assert false : "Trying to add an info bar that has already been adde d.";
200 return; 189 return;
201 } 190 }
202 addToParentView(); 191 addToParentView();
203 192
(...skipping 17 matching lines...) Expand all
221 * Notifies that an infobar's View ({@link InfoBar#getView}) has changed. If the infobar is 210 * Notifies that an infobar's View ({@link InfoBar#getView}) has changed. If the infobar is
222 * visible, a view swapping animation will be run. 211 * visible, a view swapping animation will be run.
223 */ 212 */
224 public void notifyInfoBarViewChanged() { 213 public void notifyInfoBarViewChanged() {
225 assert !mDestroyed; 214 assert !mDestroyed;
226 mLayout.notifyInfoBarViewChanged(); 215 mLayout.notifyInfoBarViewChanged();
227 } 216 }
228 217
229 /** 218 /**
230 * Removes an InfoBar from the view hierarchy. 219 * Removes an InfoBar from the view hierarchy.
220 *
221 * This should only be called by the base InfoBar class and by tests.
222 *
231 * @param infoBar InfoBar to remove from the View hierarchy. 223 * @param infoBar InfoBar to remove from the View hierarchy.
232 */ 224 */
233 public void removeInfoBar(InfoBar infoBar) { 225 public void removeInfoBar(InfoBar infoBar) {
234 assert !mDestroyed; 226 assert !mDestroyed;
235 227
236 if (!mInfoBars.remove(infoBar)) { 228 if (!mInfoBars.remove(infoBar)) {
237 assert false : "Trying to remove an InfoBar that is not in this cont ainer."; 229 assert false : "Trying to remove an InfoBar that is not in this cont ainer.";
238 return; 230 return;
239 } 231 }
240 232
241 // Notify observers immediately, before any animations begin. 233 // Notify observers immediately, before any animations begin.
242 for (InfoBarContainerObserver observer : mObservers) { 234 for (InfoBarContainerObserver observer : mObservers) {
243 observer.onRemoveInfoBar(this, infoBar, mInfoBars.isEmpty()); 235 observer.onRemoveInfoBar(this, infoBar, mInfoBars.isEmpty());
244 } 236 }
245 237
246 mLayout.removeInfoBar(infoBar); 238 mLayout.removeInfoBar(infoBar);
247 } 239 }
248 240
249 /** 241 /**
250 * @return True when this container has been emptied and its native counterp art has been 242 * @return True when this container has been emptied and its native counterp art has been
251 * destroyed. 243 * destroyed.
252 */ 244 */
253 public boolean hasBeenDestroyed() { 245 public boolean hasBeenDestroyed() {
254 return mDestroyed; 246 return mDestroyed;
255 } 247 }
256 248
257 // Called by the tab when it has started loading a new page.
258 public void onPageStarted() {
259 ArrayList<InfoBar> barsToRemove = new ArrayList<>();
260
261 for (InfoBar infoBar : mInfoBars) {
262 if (infoBar.shouldExpire()) {
263 barsToRemove.add(infoBar);
264 }
265 }
266
267 for (InfoBar infoBar : barsToRemove) {
268 infoBar.dismissJavaOnlyInfoBar();
269 }
270 }
271
272 public void destroy() { 249 public void destroy() {
273 mDestroyed = true; 250 mDestroyed = true;
274 if (mNativeInfoBarContainer != 0) { 251 if (mNativeInfoBarContainer != 0) {
275 nativeDestroy(mNativeInfoBarContainer); 252 nativeDestroy(mNativeInfoBarContainer);
276 } 253 }
277 } 254 }
278 255
279 /** 256 /**
280 * @return all of the InfoBars held in this container. 257 * @return all of the InfoBars held in this container.
281 */ 258 */
(...skipping 14 matching lines...) Expand all
296 @Override 273 @Override
297 protected boolean isAllowedToAutoHide() { 274 protected boolean isAllowedToAutoHide() {
298 return sIsAllowedToAutoHide; 275 return sIsAllowedToAutoHide;
299 } 276 }
300 277
301 private native long nativeInit(); 278 private native long nativeInit();
302 private native void nativeSetWebContents( 279 private native void nativeSetWebContents(
303 long nativeInfoBarContainerAndroid, WebContents webContents); 280 long nativeInfoBarContainerAndroid, WebContents webContents);
304 private native void nativeDestroy(long nativeInfoBarContainerAndroid); 281 private native void nativeDestroy(long nativeInfoBarContainerAndroid);
305 } 282 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698