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

Unified Diff: chrome/browser/extensions/api/tabs/tabs_event_router.cc

Issue 987583004: Add audible, muted to Tab, c.t.query, c.t.update, and c.t.onUpdated where relevant (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@patch1
Patch Set: attempt to add kalman as reviewer via git-cl owners (didn't work) Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/tabs/tabs_event_router.cc
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
index baab0e12ffeef2f666fae69c5454aeff8b6e8550..6c066044a640002b6c7ac282c6e53ca8b271a5d3 100644
--- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
@@ -2,9 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <string>
not at google - send to devlin 2015/03/10 22:30:08 not needed, header file already includes <string>
Jared Sohn 2015/03/16 02:34:28 I added that to remove a lint error: (build/includ
#include "chrome/browser/extensions/api/tabs/tabs_event_router.h"
#include "base/json/json_writer.h"
+#include "base/supports_user_data.h"
#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
@@ -16,6 +18,7 @@
#include "chrome/browser/ui/browser_iterator.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/tabs/tab_utils.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_controller.h"
@@ -23,6 +26,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
using base::DictionaryValue;
using base::ListValue;
@@ -58,7 +62,33 @@ bool WillDispatchTabUpdatedEvent(
} // namespace
+void TabsEventRouter::TabAudibleStateChanged(content::WebContents* contents,
+ bool audible) {
+ scoped_ptr<base::DictionaryValue> changed_properties(
+ new base::DictionaryValue());
not at google - send to devlin 2015/03/10 22:30:08 I just submitted https://codereview.chromium.org/1
+
+ changed_properties->SetBoolean(tabs_constants::kAudibleKey,
+ audible);
+ DispatchTabUpdatedEvent(contents, changed_properties.Pass());
miu 2015/03/10 18:51:39 Instead of dispatching separate events here and in
Jared Sohn 2015/03/16 02:34:29 Done.
+}
+
+void TabsEventRouter::TabMutedStateChanged(content::WebContents* contents,
+ bool muted,
+ const std::string& cause) {
+ scoped_ptr<base::DictionaryValue> changed_properties(
+ new base::DictionaryValue());
+
+ changed_properties->SetBoolean(tabs_constants::kMutedKey,
+ muted);
+ changed_properties->SetString(tabs_constants::kCauseKey,
+ cause);
miu 2015/03/10 18:51:39 nit: indent one less space, and run `git cl format
Jared Sohn 2015/03/16 02:34:29 Done.
+
+ DispatchTabUpdatedEvent(contents, changed_properties.Pass());
+}
+
TabsEventRouter::TabEntry::TabEntry() : complete_waiting_on_load_(false),
+ wasAudible_(false),
miu 2015/03/10 18:51:39 A TabEntry might be constructed after a tab is ali
+ wasMuted_(false),
url_() {
}
@@ -94,6 +124,24 @@ base::DictionaryValue* TabsEventRouter::TabEntry::DidNavigate(
return changed_properties;
}
+bool TabsEventRouter::TabEntry::AudibleChanged(bool val) const {
miu 2015/03/10 18:51:39 nit: Your call, but consider combining each pair o
not at google - send to devlin 2015/03/10 22:30:08 +1 and also no parens around these expressions.
Jared Sohn 2015/03/16 02:34:29 Done.
Jared Sohn 2015/03/16 02:34:29 Done.
+ return (wasAudible_ != val);
+}
+
+bool TabsEventRouter::TabEntry::MutedChanged(bool val) const {
+ return (wasMuted_ != val);
+}
+
+void TabsEventRouter::TabEntry::ToggleAudible() {
+ wasAudible_ = !wasAudible_;
+}
+
+void TabsEventRouter::TabEntry::ToggleMuted() {
+ wasMuted_ = !wasMuted_;
+}
+
+
+
not at google - send to devlin 2015/03/10 22:30:08 only 1 blank line
Jared Sohn 2015/03/16 02:34:29 Done.
TabsEventRouter::TabsEventRouter(Profile* profile) : profile_(profile) {
DCHECK(!profile->IsOffTheRecord());
@@ -396,6 +444,21 @@ void TabsEventRouter::TabUpdated(WebContents* contents, bool did_navigate) {
CHECK(entry);
+ bool audible = contents->WasRecentlyAudible();
+ if (entry->AudibleChanged(audible)) {
+ entry->ToggleAudible();
+
+ TabAudibleStateChanged(contents, audible);
+ }
+
+ bool muted = contents->IsAudioMuted();
+ if (entry->MutedChanged(muted)) {
+ entry->ToggleMuted();
+
+ TabMutedStateChanged(contents, muted,
+ chrome::GetTabAudioMutedCause(contents));
+ }
not at google - send to devlin 2015/03/10 22:30:08 This code should be consistent with the existing c
Jared Sohn 2015/03/16 02:34:29 At the moment, I am choosing to pass an extensions
not at google - send to devlin 2015/03/16 17:47:08 Passing a DictionaryBuilder is fine. I hadn't thou
+
if (did_navigate)
changed_properties.reset(entry->DidNavigate(contents));
else
@@ -450,6 +513,7 @@ void TabsEventRouter::DispatchSimpleBrowserEvent(
void TabsEventRouter::DispatchTabUpdatedEvent(
WebContents* contents,
scoped_ptr<base::DictionaryValue> changed_properties) {
+
miu 2015/03/10 18:51:39 nit: remove added newlines throughout this method
Jared Sohn 2015/03/16 02:34:28 Done.
DCHECK(changed_properties);
DCHECK(contents);
@@ -468,14 +532,17 @@ void TabsEventRouter::DispatchTabUpdatedEvent(
// WillDispatchTabUpdatedEvent.
Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
+
scoped_ptr<Event> event(
new Event(tabs::OnUpdated::kEventName, args_base.Pass()));
event->restrict_to_browser_context = profile;
+
event->user_gesture = EventRouter::USER_GESTURE_NOT_ENABLED;
event->will_dispatch_callback =
base::Bind(&WillDispatchTabUpdatedEvent,
contents,
changed_properties.get());
+
EventRouter::Get(profile)->BroadcastEvent(event.Pass());
}

Powered by Google App Engine
This is Rietveld 408576698