chrome.tabs API: muted+mutedCause --> MutedInfo struct, and launch

This change adds structure to the muted state provided via the
chrome.tabs API.  Before this change, there were two fields in the Tab
object, muted and mutedCause, the latter of which was an overloaded
string field.  After this change, the two fields are replaced with a
single MutedInfo struct.  The struct itself contains three fields:
the "muted" boolean, an enumerated "reason", and an "extensionId" string
that is only set if the muted state change was caused by an extension.

As this is the last functional issue for these new API properties, this
change also makes them on-by-default, for read and update.

BUG=438903

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

Cr-Commit-Position: refs/heads/master@{#343551}
diff --git a/chrome/browser/extensions/extension_tab_util.h b/chrome/browser/extensions/extension_tab_util.h
index ce1d7a82..9af4dcb 100644
--- a/chrome/browser/extensions/extension_tab_util.h
+++ b/chrome/browser/extensions/extension_tab_util.h
@@ -114,6 +114,11 @@
       TabStripModel* tab_strip,
       int tab_index);
 
+  // Creates a tab MutedInfo object (see chrome/common/extensions/api/tabs.json)
+  // with information about the mute state of a browser tab.
+  static scoped_ptr<base::DictionaryValue> CreateMutedInfo(
+      content::WebContents* contents);
+
   // Removes any privacy-sensitive fields from a Tab object if appropriate,
   // given the permissions of the extension and the tab in question.  The
   // tab_info object is modified in place.
@@ -181,14 +186,6 @@
   // Returns true if the given Browser can report tabs to extensions.
   // Example of Browsers which don't support tabs include apps and devtools.
   static bool BrowserSupportsTabs(Browser* browser);
-
-  // Returns the ID of the extension that last changed a tab's mute state, or
-  // 'user' if a user action caused the change, or 'capture' if media
-  // recording/capture caused the change.  |contents| must not be null.
-  //
-  // TODO(miu): An chrome.tabs API change should be made to split this out into
-  // a "reason" enum and an "extension_id" string.  http://crbug.com/438903
-  static std::string GetTabAudioMutedReason(content::WebContents* contents);
 };
 
 }  // namespace extensions