| Index: chrome/browser/extensions/extension_tab_util.cc | 
| diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc | 
| index 1ebe3af4a2e779be5ce682219100f6967218cd0e..0171c331fc76b74672fb2ecf65af87180cb34c83 100644 | 
| --- a/chrome/browser/extensions/extension_tab_util.cc | 
| +++ b/chrome/browser/extensions/extension_tab_util.cc | 
| @@ -64,14 +64,9 @@ DictionaryValue* ExtensionTabUtil::CreateTabValue( | 
| TabStripModel* tab_strip, | 
| int tab_index, | 
| const Extension* extension) { | 
| -  // Only add privacy-sensitive data if the requesting extension has the tabs | 
| -  // permission. | 
| -  bool has_permission = extension && extension->HasAPIPermissionForTab( | 
| -      GetTabId(contents), APIPermission::kTab); | 
| - | 
| -  return CreateTabValue(contents, tab_strip, tab_index, | 
| -                        has_permission ? INCLUDE_PRIVACY_SENSITIVE_FIELDS : | 
| -                            OMIT_PRIVACY_SENSITIVE_FIELDS); | 
| +  DictionaryValue *result = CreateTabValue(contents, tab_strip, tab_index); | 
| +  ScrubTabValueForExtension(contents, extension, result); | 
| +  return result; | 
| } | 
|  | 
| ListValue* ExtensionTabUtil::CreateTabList( | 
| @@ -92,8 +87,7 @@ ListValue* ExtensionTabUtil::CreateTabList( | 
| DictionaryValue* ExtensionTabUtil::CreateTabValue( | 
| const WebContents* contents, | 
| TabStripModel* tab_strip, | 
| -    int tab_index, | 
| -    IncludePrivacySensitiveFields include_privacy_sensitive_fields) { | 
| +    int tab_index) { | 
| if (!tab_strip) | 
| ExtensionTabUtil::GetTabStripModel(contents, &tab_strip, &tab_index); | 
|  | 
| @@ -114,14 +108,14 @@ DictionaryValue* ExtensionTabUtil::CreateTabValue( | 
| result->SetBoolean(keys::kIncognitoKey, | 
| contents->GetBrowserContext()->IsOffTheRecord()); | 
|  | 
| -  if (include_privacy_sensitive_fields == INCLUDE_PRIVACY_SENSITIVE_FIELDS) { | 
| -    result->SetString(keys::kUrlKey, contents->GetURL().spec()); | 
| -    result->SetString(keys::kTitleKey, contents->GetTitle()); | 
| -    if (!is_loading) { | 
| -      NavigationEntry* entry = contents->GetController().GetActiveEntry(); | 
| -      if (entry && entry->GetFavicon().valid) | 
| -        result->SetString(keys::kFaviconUrlKey, entry->GetFavicon().url.spec()); | 
| -    } | 
| +  // Privacy-sensitive fields: these should be stripped off by | 
| +  // ScrubTabValueForExtension if the extension should not see them. | 
| +  result->SetString(keys::kUrlKey, contents->GetURL().spec()); | 
| +  result->SetString(keys::kTitleKey, contents->GetTitle()); | 
| +  if (!is_loading) { | 
| +    NavigationEntry* entry = contents->GetController().GetActiveEntry(); | 
| +    if (entry && entry->GetFavicon().valid) | 
| +      result->SetString(keys::kFaviconUrlKey, entry->GetFavicon().url.spec()); | 
| } | 
|  | 
| if (tab_strip) { | 
| @@ -133,6 +127,19 @@ DictionaryValue* ExtensionTabUtil::CreateTabValue( | 
| return result; | 
| } | 
|  | 
| +void ExtensionTabUtil::ScrubTabValueForExtension(const WebContents* contents, | 
| +                                                 const Extension* extension, | 
| +                                                 DictionaryValue* tab_info) { | 
| +  bool has_permission = extension && extension->HasAPIPermissionForTab( | 
| +      GetTabId(contents), APIPermission::kTab); | 
| + | 
| +  if (!has_permission) { | 
| +    tab_info->Remove(keys::kUrlKey, NULL); | 
| +    tab_info->Remove(keys::kTitleKey, NULL); | 
| +    tab_info->Remove(keys::kFaviconUrlKey, NULL); | 
| +  } | 
| +} | 
| + | 
| bool ExtensionTabUtil::GetTabStripModel(const WebContents* web_contents, | 
| TabStripModel** tab_strip_model, | 
| int* tab_index) { | 
|  |