Index: chrome/browser/extensions/api/extension_action/extension_actions_api.cc |
diff --git a/chrome/browser/extensions/api/extension_action/extension_actions_api.cc b/chrome/browser/extensions/api/extension_action/extension_actions_api.cc |
index c9c0b846c3a06060d89f27a2335328f93ac870cd..f640799d0b2dc9bb6044f93ea698ad3d853561dd 100644 |
--- a/chrome/browser/extensions/api/extension_action/extension_actions_api.cc |
+++ b/chrome/browser/extensions/api/extension_action/extension_actions_api.cc |
@@ -286,6 +286,9 @@ bool ExtensionActionFunction::RunImpl() { |
if (base::StringPiece(name()).starts_with("scriptBadge.")) { |
extension_action_ = extensions::ExtensionActionManager::Get(profile_)-> |
GetScriptBadge(*GetExtension()); |
+ } else if (base::StringPiece(name()).starts_with("systemIndicator.")) { |
+ extension_action_ = extensions::ExtensionActionManager::Get(profile_)-> |
+ GetSystemIndicator(*GetExtension()); |
} else { |
extension_action_ = extensions::ExtensionActionManager::Get(profile_)-> |
GetBrowserAction(*GetExtension()); |
@@ -302,51 +305,20 @@ bool ExtensionActionFunction::RunImpl() { |
return false; |
} |
- // There may or may not be details (depends on the function). |
- // The tabId might appear in details (if it exists) or as the first |
- // argument besides the action type (depends on the function). |
- { |
- base::Value* first_arg = NULL; |
- EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &first_arg)); |
- |
- switch (first_arg->GetType()) { |
- case Value::TYPE_INTEGER: |
- CHECK(first_arg->GetAsInteger(&tab_id_)); |
- break; |
- |
- case Value::TYPE_DICTIONARY: { |
- details_ = static_cast<base::DictionaryValue*>(first_arg); |
- base::Value* tab_id_value = NULL; |
- if (details_->Get("tabId", &tab_id_value)) { |
- switch (tab_id_value->GetType()) { |
- case Value::TYPE_NULL: |
- // Fine, equivalent to it being not-there, and tabId is optional. |
- break; |
- case Value::TYPE_INTEGER: |
- CHECK(tab_id_value->GetAsInteger(&tab_id_)); |
- break; |
- default: |
- // Boom. |
- EXTENSION_FUNCTION_VALIDATE(false); |
- } |
- } |
- break; |
- } |
- |
- case Value::TYPE_NULL: |
- // The tabId might be an optional argument. |
- break; |
- |
- default: |
- EXTENSION_FUNCTION_VALIDATE(false); |
- } |
+ if (!ValidateArguments()) { |
+ return false; |
not at google - send to devlin
2012/11/21 23:39:23
EXTENSION_FUNCTION_VALIDATE(ValidateArguments())
dewittj
2012/11/26 18:32:58
Done. Renamed to more accurately reflect what's g
|
} |
// Find the WebContents that contains this tab id if one is required. |
if (tab_id_ == ExtensionAction::kDefaultTabId) { |
- EXTENSION_FUNCTION_VALIDATE( |
- extensions::ExtensionActionManager::Get(profile_)-> |
- GetBrowserAction(*GetExtension())); |
+ extensions::ExtensionActionManager* mgr = |
+ extensions::ExtensionActionManager::Get(profile_); |
not at google - send to devlin
2012/11/21 23:39:23
nit: do this at top, then re-use is everywhere els
dewittj
2012/11/26 18:32:58
Done.
|
+ if (extension_action_->action_type() == |
+ extensions::Extension::ActionInfo::TYPE_BROWSER) { |
+ EXTENSION_FUNCTION_VALIDATE(mgr->GetBrowserAction(*GetExtension())); |
+ } else { |
+ EXTENSION_FUNCTION_VALIDATE(mgr->GetSystemIndicator(*GetExtension())); |
not at google - send to devlin
2012/11/21 23:39:23
actually... a more sensible check here is probably
dewittj
2012/11/26 18:32:58
Good idea. Done.
|
+ } |
} else { |
ExtensionTabUtil::GetTabById( |
tab_id_, profile(), include_incognito(), NULL, NULL, &contents_, NULL); |
@@ -360,6 +332,48 @@ bool ExtensionActionFunction::RunImpl() { |
return RunExtensionAction(); |
} |
+bool ExtensionActionFunction::ValidateArguments() { |
+ // There may or may not be details (depends on the function). |
+ // The tabId might appear in details (if it exists) or as the first |
+ // argument besides the action type (depends on the function). |
+ base::Value* first_arg = NULL; |
+ EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &first_arg)); |
not at google - send to devlin
2012/11/21 23:39:23
let's push up the call to EXTENSION_FUNCTION_VALID
dewittj
2012/11/26 18:32:58
Done.
|
+ |
+ switch (first_arg->GetType()) { |
+ case Value::TYPE_INTEGER: |
+ CHECK(first_arg->GetAsInteger(&tab_id_)); |
+ break; |
+ |
+ case Value::TYPE_DICTIONARY: { |
+ details_ = static_cast<base::DictionaryValue*>(first_arg); |
+ base::Value* tab_id_value = NULL; |
+ if (details_->Get("tabId", &tab_id_value)) { |
+ switch (tab_id_value->GetType()) { |
+ case Value::TYPE_NULL: |
+ // Fine, equivalent to it being not-there, and tabId is optional. |
+ break; |
+ case Value::TYPE_INTEGER: |
+ CHECK(tab_id_value->GetAsInteger(&tab_id_)); |
+ break; |
+ default: |
+ // Boom. |
+ EXTENSION_FUNCTION_VALIDATE(false); |
+ } |
+ } |
+ break; |
+ } |
+ |
+ case Value::TYPE_NULL: |
+ // The tabId might be an optional argument. |
+ break; |
+ |
+ default: |
+ EXTENSION_FUNCTION_VALIDATE(false); |
+ } |
+ |
+ return true; |
+} |
+ |
void ExtensionActionFunction::NotifyChange() { |
switch (extension_action_->action_type()) { |
case extensions::Extension::ActionInfo::TYPE_BROWSER: |
@@ -375,6 +389,9 @@ void ExtensionActionFunction::NotifyChange() { |
case extensions::Extension::ActionInfo::TYPE_SCRIPT_BADGE: |
NotifyLocationBarChange(); |
return; |
+ case extensions::Extension::ActionInfo::TYPE_SYSTEM_INDICATOR: |
+ NotifyStatusTrayChange(); |
+ return; |
} |
NOTREACHED(); |
} |
@@ -391,6 +408,9 @@ void ExtensionActionFunction::NotifyLocationBarChange() { |
location_bar_controller()->NotifyChange(); |
} |
+void ExtensionActionFunction::NotifyStatusTrayChange() { |
not at google - send to devlin
2012/11/21 23:39:23
TODO(dewittj): implement (see http://crbug.com/142
dewittj
2012/11/26 18:32:58
Done.
|
+} |
+ |
// static |
bool ExtensionActionFunction::ParseCSSColorString( |
const std::string& color_string, |