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

Unified Diff: chrome/browser/ui/ash/launcher/browser_status_monitor.cc

Issue 23708028: Reduce calling count of UpdateAppState() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Monitor active tab's webcontents by using WebContenetsObserver. Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/launcher/browser_status_monitor.cc
diff --git a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
index c9965ed1b419acd26631e71fa2b4b000c4a1f1a7..202da6dd96dfaa89d3a8e17462638f823f076bb4 100644
--- a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
+++ b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
@@ -6,6 +6,7 @@
#include "ash/shell.h"
#include "ash/wm/window_util.h"
+#include "base/stl_util.h"
#include "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h"
#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
#include "chrome/browser/ui/browser.h"
@@ -14,6 +15,7 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/web_applications/web_app.h"
+#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
#include "ui/aura/client/activation_client.h"
@@ -21,6 +23,31 @@
#include "ui/aura/window.h"
#include "ui/gfx/screen.h"
+BrowserStatusMonitor::ActiveWebContentsObserver::ActiveWebContentsObserver(
+ content::WebContents* contents,
+ BrowserStatusMonitor* monitor)
+ : content::WebContentsObserver(contents),
+ monitor_(monitor) {
+}
+
+BrowserStatusMonitor::ActiveWebContentsObserver::~ActiveWebContentsObserver() {
+}
+
+void BrowserStatusMonitor::ActiveWebContentsObserver::NavigateToPendingEntry(
+ const GURL& url,
+ content::NavigationController::ReloadType reload_type) {
+ // Don't need to update item state when page is reloaded.
Mr4D (OOO till 08-26) 2013/09/13 14:35:18 What about: No need to update the item state when
simonhong_ 2013/09/15 17:27:08 I removed this method and only DidNavigateMainFram
+ if (reload_type == content::NavigationController::NO_RELOAD) {
Mr4D (OOO till 08-26) 2013/09/13 14:35:18 No {} here.
simonhong_ 2013/09/15 17:27:08 Done.
+ monitor_->UpdateAppAndBrowserState(web_contents());
+ }
+}
+
+void BrowserStatusMonitor::ActiveWebContentsObserver::DidNavigateMainFrame(
+ const content::LoadCommittedDetails& details,
+ const content::FrameNavigateParams& params) {
+ monitor_->UpdateAppAndBrowserState(web_contents());
+}
+
BrowserStatusMonitor::BrowserStatusMonitor(
ChromeLauncherController* launcher_controller)
: launcher_controller_(launcher_controller),
@@ -62,6 +89,9 @@ BrowserStatusMonitor::~BrowserStatusMonitor() {
i != browser_list->end(); ++i) {
OnBrowserRemoved(*i);
}
+
+ STLDeleteContainerPairSecondPointers(webcontents_to_observer_map_.begin(),
+ webcontents_to_observer_map_.end());
}
void BrowserStatusMonitor::OnWindowActivated(aura::Window* gained_active,
@@ -155,12 +185,25 @@ void BrowserStatusMonitor::ActiveTabChanged(content::WebContents* old_contents,
if (browser &&
(TabStripModel::kNoTab !=
browser->tab_strip_model()->GetIndexOfWebContents(old_contents))) {
+ if (webcontents_to_observer_map_.find(old_contents) !=
Mr4D (OOO till 08-26) 2013/09/13 14:35:18 You might want to put this deletion code into a fu
simonhong_ 2013/09/15 17:27:08 I changed to observe all web contents. Inactive we
+ webcontents_to_observer_map_.end()) {
+ delete webcontents_to_observer_map_[old_contents];
+ webcontents_to_observer_map_.erase(old_contents);
+ }
+
launcher_controller_->UpdateAppState(
old_contents,
ChromeLauncherController::APP_STATE_INACTIVE);
}
- UpdateAppAndBrowserState(new_contents);
+ if (new_contents) {
+ if (webcontents_to_observer_map_.find(new_contents) ==
+ webcontents_to_observer_map_.end()) {
+ webcontents_to_observer_map_[new_contents] =
+ new ActiveWebContentsObserver(new_contents, this);
+ }
+ UpdateAppAndBrowserState(new_contents);
+ }
}
void BrowserStatusMonitor::TabInsertedAt(content::WebContents* contents,
@@ -169,30 +212,20 @@ void BrowserStatusMonitor::TabInsertedAt(content::WebContents* contents,
UpdateAppAndBrowserState(contents);
}
-void BrowserStatusMonitor::TabDetachedAt(content::WebContents* contents,
- int index) {
+void BrowserStatusMonitor::TabClosingAt(TabStripModel* tab_strip_mode,
+ content::WebContents* contents,
+ int index) {
Mr4D (OOO till 08-26) 2013/09/13 14:35:18 Is this really the same event? Did you try to drag
simonhong_ 2013/09/15 17:27:08 Not same event. When drag and drop a tab from one
+ if (webcontents_to_observer_map_.find(contents) !=
+ webcontents_to_observer_map_.end()) {
+ delete webcontents_to_observer_map_[contents];
+ webcontents_to_observer_map_.erase(contents);
+ }
+
launcher_controller_->UpdateAppState(
contents, ChromeLauncherController::APP_STATE_REMOVED);
UpdateBrowserItemState();
}
-void BrowserStatusMonitor::TabChangedAt(
- content::WebContents* contents,
- int index,
- TabStripModelObserver::TabChangeType change_type) {
- UpdateAppAndBrowserState(contents);
-}
-
-void BrowserStatusMonitor::TabReplacedAt(TabStripModel* tab_strip_model,
- content::WebContents* old_contents,
- content::WebContents* new_contents,
- int index) {
- launcher_controller_->UpdateAppState(
- old_contents,
- ChromeLauncherController::APP_STATE_REMOVED);
- UpdateAppAndBrowserState(new_contents);
-}
-
void BrowserStatusMonitor::UpdateAppAndBrowserState(
content::WebContents* contents) {
if (contents) {

Powered by Google App Engine
This is Rietveld 408576698