Add audible, muted to Tab, c.t.query, c.t.update, and c.t.onUpdated where relevant
chrome.tabs.update will reject the audible property.
When the onUpdated event is triggered for the muted property, it sets cause
to "user", "capture", or the extension id that caused it

Note: Requires --enable-tab-audio-muting flag to be active (chrome://flags) in order to set a tab's muted state via c.t.update.

BUG=438903

Review URL: https://codereview.chromium.org/987583004

Cr-Commit-Position: refs/heads/master@{#337981}
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
index f1783f7..0298cb0 100644
--- a/chrome/browser/extensions/extension_tab_util.cc
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/tabs/tab_utils.h"
 #include "chrome/common/extensions/api/tabs.h"
 #include "chrome/common/url_constants.h"
 #include "components/url_fixer/url_fixer.h"
@@ -386,6 +387,12 @@
                    tab_strip && tab_strip->IsTabSelected(tab_index));
   result->SetBoolean(keys::kPinnedKey,
                      tab_strip && tab_strip->IsTabPinned(tab_index));
+  result->SetBoolean(keys::kAudibleKey,
+                     tab_strip && chrome::IsPlayingAudio(contents));
+  result->SetBoolean(keys::kMutedKey,
+                     tab_strip && chrome::IsTabAudioMuted(contents));
+  result->SetString(keys::kMutedCauseKey,
+                    chrome::GetTabAudioMutedCause(contents));
   result->SetBoolean(keys::kIncognitoKey,
                      contents->GetBrowserContext()->IsOffTheRecord());
   result->SetInteger(keys::kWidthKey,