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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java

Issue 2014433002: Fix theme colors not updating when navigating back/from the NTP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 4 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.tab; 5 package org.chromium.chrome.browser.tab;
6 6
7 import android.content.Context;
8 import android.graphics.Color;
9 import android.os.SystemClock; 7 import android.os.SystemClock;
10 import android.support.annotation.IntDef; 8 import android.support.annotation.IntDef;
11 import android.view.View; 9 import android.view.View;
12 10
13 import org.chromium.base.ActivityState; 11 import org.chromium.base.ActivityState;
14 import org.chromium.base.ApplicationState; 12 import org.chromium.base.ApplicationState;
15 import org.chromium.base.ApplicationStatus; 13 import org.chromium.base.ApplicationStatus;
16 import org.chromium.base.Log; 14 import org.chromium.base.Log;
17 import org.chromium.base.ObserverList.RewindableIterator; 15 import org.chromium.base.ObserverList.RewindableIterator;
18 import org.chromium.base.metrics.RecordHistogram; 16 import org.chromium.base.metrics.RecordHistogram;
19 import org.chromium.chrome.browser.ChromeApplication; 17 import org.chromium.chrome.browser.ChromeApplication;
20 import org.chromium.chrome.browser.fullscreen.FullscreenManager; 18 import org.chromium.chrome.browser.fullscreen.FullscreenManager;
21 import org.chromium.chrome.browser.media.MediaCaptureNotificationService; 19 import org.chromium.chrome.browser.media.MediaCaptureNotificationService;
22 import org.chromium.chrome.browser.metrics.UmaSessionStats; 20 import org.chromium.chrome.browser.metrics.UmaSessionStats;
23 import org.chromium.chrome.browser.metrics.UmaUtils; 21 import org.chromium.chrome.browser.metrics.UmaUtils;
24 import org.chromium.chrome.browser.policy.PolicyAuditor; 22 import org.chromium.chrome.browser.policy.PolicyAuditor;
25 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent; 23 import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent;
26 import org.chromium.components.security_state.ConnectionSecurityLevel;
27 import org.chromium.content_public.browser.WebContents; 24 import org.chromium.content_public.browser.WebContents;
28 import org.chromium.content_public.browser.WebContentsObserver; 25 import org.chromium.content_public.browser.WebContentsObserver;
29 import org.chromium.ui.base.DeviceFormFactor;
30 26
31 import java.util.concurrent.TimeUnit; 27 import java.util.concurrent.TimeUnit;
32 28
33 /** 29 /**
34 * WebContentsObserver used by Tab. 30 * WebContentsObserver used by Tab.
35 */ 31 */
36 public class TabWebContentsObserver extends WebContentsObserver { 32 public class TabWebContentsObserver extends WebContentsObserver {
37 // URL didFailLoad error code. Should match the value in net_error_list.h. 33 // URL didFailLoad error code. Should match the value in net_error_list.h.
38 public static final int BLOCKED_BY_ADMINISTRATOR = -22; 34 public static final int BLOCKED_BY_ADMINISTRATOR = -22;
39 35
(...skipping 18 matching lines...) Expand all
58 private @interface TabRendererExitStatus {} 54 private @interface TabRendererExitStatus {}
59 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_RUNNING_A PP = 0; 55 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_RUNNING_A PP = 0;
60 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_PAUSED_AP P = 1; 56 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_PAUSED_AP P = 1;
61 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_BACKGROUN D_APP = 2; 57 private static final int TAB_RENDERER_EXIT_STATUS_OOM_PROTECTED_IN_BACKGROUN D_APP = 2;
62 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_RUNNING_A PP = 3; 58 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_RUNNING_A PP = 3;
63 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_PAUSED_AP P = 4; 59 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_PAUSED_AP P = 4;
64 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_BACKGROUN D_APP = 5; 60 private static final int TAB_RENDERER_EXIT_STATUS_NOT_PROTECTED_IN_BACKGROUN D_APP = 5;
65 private static final int TAB_RENDERER_EXIT_STATUS_MAX = 6; 61 private static final int TAB_RENDERER_EXIT_STATUS_MAX = 6;
66 62
67 private final Tab mTab; 63 private final Tab mTab;
68 private int mThemeColor;
69 64
70 public TabWebContentsObserver(WebContents webContents, Tab tab) { 65 public TabWebContentsObserver(WebContents webContents, Tab tab) {
71 super(webContents); 66 super(webContents);
72 mTab = tab; 67 mTab = tab;
73 mThemeColor = mTab.getDefaultThemeColor();
74 } 68 }
75 69
76 @Override 70 @Override
77 public void renderProcessGone(boolean processWasOomProtected) { 71 public void renderProcessGone(boolean processWasOomProtected) {
78 Log.i(TAG, "renderProcessGone() for tab id: " + mTab.getId() 72 Log.i(TAG, "renderProcessGone() for tab id: " + mTab.getId()
79 + ", oom protected: " + Boolean.toString(processWasOomProtected) 73 + ", oom protected: " + Boolean.toString(processWasOomProtected)
80 + ", already needs reload: " + Boolean.toString(mTab.needsReload ())); 74 + ", already needs reload: " + Boolean.toString(mTab.needsReload ()));
81 // Do nothing for subsequent calls that happen while the tab remains cra shed. This 75 // Do nothing for subsequent calls that happen while the tab remains cra shed. This
82 // can occur when the tab is in the background and it shares the rendere r with other 76 // can occur when the tab is in the background and it shares the rendere r with other
83 // tabs. After the renderer crashes, the WebContents of its tabs are sti ll around 77 // tabs. After the renderer crashes, the WebContents of its tabs are sti ll around
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 @Override 254 @Override
261 public void didFirstVisuallyNonEmptyPaint() { 255 public void didFirstVisuallyNonEmptyPaint() {
262 RewindableIterator<TabObserver> observers = mTab.getTabObservers(); 256 RewindableIterator<TabObserver> observers = mTab.getTabObservers();
263 while (observers.hasNext()) { 257 while (observers.hasNext()) {
264 observers.next().didFirstVisuallyNonEmptyPaint(mTab); 258 observers.next().didFirstVisuallyNonEmptyPaint(mTab);
265 } 259 }
266 } 260 }
267 261
268 @Override 262 @Override
269 public void didChangeThemeColor(int color) { 263 public void didChangeThemeColor(int color) {
270 int securityLevel = mTab.getSecurityLevel(); 264 mTab.updateThemeColorIfNeeded();
271 if (securityLevel == ConnectionSecurityLevel.SECURITY_ERROR
272 || securityLevel == ConnectionSecurityLevel.SECURITY_WARNING
273 || securityLevel == ConnectionSecurityLevel.SECURITY_POLICY_WARN ING) {
274 color = mTab.getDefaultThemeColor();
275 }
276 if (mTab.isShowingInterstitialPage()) color = mTab.getDefaultThemeColor( );
277 if (!isThemeColorEnabled(mTab.getApplicationContext())) {
278 color = mTab.getDefaultThemeColor();
279 }
280 if (color == Color.TRANSPARENT) color = mTab.getDefaultThemeColor();
281 if (mTab.isIncognito()) color = mTab.getDefaultThemeColor();
282 color |= 0xFF000000;
283 if (mTab.getThemeColor() == color) return;
284 mThemeColor = color;
285 RewindableIterator<TabObserver> observers = mTab.getTabObservers();
286 while (observers.hasNext()) {
287 observers.next().onDidChangeThemeColor(mTab, mTab.getThemeColor());
288 }
289 } 265 }
290 266
291 @Override 267 @Override
292 public void didAttachInterstitialPage() { 268 public void didAttachInterstitialPage() {
293 mTab.getInfoBarContainer().setVisibility(View.INVISIBLE); 269 mTab.getInfoBarContainer().setVisibility(View.INVISIBLE);
294 mTab.showRenderedPage(); 270 mTab.showRenderedPage();
295 didChangeThemeColor(mTab.getDefaultThemeColor()); 271 mTab.updateThemeColorIfNeeded();
296 272
297 RewindableIterator<TabObserver> observers = mTab.getTabObservers(); 273 RewindableIterator<TabObserver> observers = mTab.getTabObservers();
298 while (observers.hasNext()) { 274 while (observers.hasNext()) {
299 observers.next().onDidAttachInterstitialPage(mTab); 275 observers.next().onDidAttachInterstitialPage(mTab);
300 } 276 }
301 mTab.notifyLoadProgress(mTab.getProgress()); 277 mTab.notifyLoadProgress(mTab.getProgress());
302 278
303 mTab.updateFullscreenEnabledState(); 279 mTab.updateFullscreenEnabledState();
304 280
305 PolicyAuditor auditor = 281 PolicyAuditor auditor =
306 ((ChromeApplication) mTab.getApplicationContext()).getPolicyAudi tor(); 282 ((ChromeApplication) mTab.getApplicationContext()).getPolicyAudi tor();
307 auditor.notifyCertificateFailure( 283 auditor.notifyCertificateFailure(
308 PolicyAuditor.nativeGetCertificateFailure(mTab.getWebContents()) , 284 PolicyAuditor.nativeGetCertificateFailure(mTab.getWebContents()) ,
309 mTab.getApplicationContext()); 285 mTab.getApplicationContext());
310 } 286 }
311 287
312 @Override 288 @Override
313 public void didDetachInterstitialPage() { 289 public void didDetachInterstitialPage() {
314 mTab.getInfoBarContainer().setVisibility(View.VISIBLE); 290 mTab.getInfoBarContainer().setVisibility(View.VISIBLE);
315 didChangeThemeColor(mTab.getWebContents().getThemeColor(mTab.getDefaultT hemeColor())); 291 mTab.updateThemeColorIfNeeded();
316 292
317 RewindableIterator<TabObserver> observers = mTab.getTabObservers(); 293 RewindableIterator<TabObserver> observers = mTab.getTabObservers();
318 while (observers.hasNext()) { 294 while (observers.hasNext()) {
319 observers.next().onDidDetachInterstitialPage(mTab); 295 observers.next().onDidDetachInterstitialPage(mTab);
320 } 296 }
321 mTab.notifyLoadProgress(mTab.getProgress()); 297 mTab.notifyLoadProgress(mTab.getProgress());
322 298
323 mTab.updateFullscreenEnabledState(); 299 mTab.updateFullscreenEnabledState();
324 300
325 if (!mTab.maybeShowNativePage(mTab.getUrl(), false)) { 301 if (!mTab.maybeShowNativePage(mTab.getUrl(), false)) {
326 mTab.showRenderedPage(); 302 mTab.showRenderedPage();
327 } 303 }
328 } 304 }
329 305
330 @Override 306 @Override
331 public void didStartNavigationToPendingEntry(String url) { 307 public void didStartNavigationToPendingEntry(String url) {
332 RewindableIterator<TabObserver> observers = mTab.getTabObservers(); 308 RewindableIterator<TabObserver> observers = mTab.getTabObservers();
333 while (observers.hasNext()) { 309 while (observers.hasNext()) {
334 observers.next().onDidStartNavigationToPendingEntry(mTab, url); 310 observers.next().onDidStartNavigationToPendingEntry(mTab, url);
335 } 311 }
336 } 312 }
337 313
338 @Override 314 @Override
339 public void destroy() { 315 public void destroy() {
340 MediaCaptureNotificationService.updateMediaNotificationForTab( 316 MediaCaptureNotificationService.updateMediaNotificationForTab(
341 mTab.getApplicationContext(), mTab.getId(), false, false, mTab.g etUrl()); 317 mTab.getApplicationContext(), mTab.getId(), false, false, mTab.g etUrl());
342 super.destroy(); 318 super.destroy();
343 } 319 }
344
345 /**
346 * @return The theme-color for this web contents.
347 */
348 int getThemeColor() {
349 return mThemeColor;
350 }
351
352 private static boolean isThemeColorEnabled(Context context) {
353 return !DeviceFormFactor.isTablet(context);
354 }
355 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698