| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/extensions/api/extension_action/action_info.h" | 5 #include "chrome/common/extensions/api/extension_action/action_info.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/common/extensions/api/commands/commands_handler.h" | 9 #include "chrome/common/extensions/api/commands/commands_handler.h" |
| 10 #include "chrome/common/extensions/extension_constants.h" | 10 #include "chrome/common/extensions/extension_constants.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 // kPageActionIcons is obsolete, and used by very few extensions. Continue | 62 // kPageActionIcons is obsolete, and used by very few extensions. Continue |
| 63 // loading it, but only take the first icon as the default_icon path. | 63 // loading it, but only take the first icon as the default_icon path. |
| 64 const base::ListValue* icons = NULL; | 64 const base::ListValue* icons = NULL; |
| 65 if (dict->HasKey(keys::kPageActionIcons) && | 65 if (dict->HasKey(keys::kPageActionIcons) && |
| 66 dict->GetList(keys::kPageActionIcons, &icons)) { | 66 dict->GetList(keys::kPageActionIcons, &icons)) { |
| 67 base::ListValue::const_iterator iter = icons->begin(); | 67 base::ListValue::const_iterator iter = icons->begin(); |
| 68 std::string path; | 68 std::string path; |
| 69 if (iter == icons->end() || | 69 if (iter == icons->end() || |
| 70 !(*iter)->GetAsString(&path) || | 70 !(*iter)->GetAsString(&path) || |
| 71 !manifest_handler_helpers::NormalizeAndValidatePath(&path)) { | 71 !manifest_handler_helpers::NormalizeAndValidatePath(&path)) { |
| 72 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); | 72 *error = base::ASCIIToUTF16(errors::kInvalidPageActionIconPath); |
| 73 return scoped_ptr<ActionInfo>(); | 73 return scoped_ptr<ActionInfo>(); |
| 74 } | 74 } |
| 75 result->default_icon.Add(extension_misc::EXTENSION_ICON_ACTION, path); | 75 result->default_icon.Add(extension_misc::EXTENSION_ICON_ACTION, path); |
| 76 } | 76 } |
| 77 | 77 |
| 78 std::string id; | 78 std::string id; |
| 79 if (dict->HasKey(keys::kPageActionId)) { | 79 if (dict->HasKey(keys::kPageActionId)) { |
| 80 if (!dict->GetString(keys::kPageActionId, &id)) { | 80 if (!dict->GetString(keys::kPageActionId, &id)) { |
| 81 *error = ASCIIToUTF16(errors::kInvalidPageActionId); | 81 *error = base::ASCIIToUTF16(errors::kInvalidPageActionId); |
| 82 return scoped_ptr<ActionInfo>(); | 82 return scoped_ptr<ActionInfo>(); |
| 83 } | 83 } |
| 84 result->id = id; | 84 result->id = id; |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 // Read the page action |default_icon| (optional). | 88 // Read the page action |default_icon| (optional). |
| 89 // The |default_icon| value can be either dictionary {icon size -> icon path} | 89 // The |default_icon| value can be either dictionary {icon size -> icon path} |
| 90 // or non empty string value. | 90 // or non empty string value. |
| 91 if (dict->HasKey(keys::kPageActionDefaultIcon)) { | 91 if (dict->HasKey(keys::kPageActionDefaultIcon)) { |
| 92 const base::DictionaryValue* icons_value = NULL; | 92 const base::DictionaryValue* icons_value = NULL; |
| 93 std::string default_icon; | 93 std::string default_icon; |
| 94 if (dict->GetDictionary(keys::kPageActionDefaultIcon, &icons_value)) { | 94 if (dict->GetDictionary(keys::kPageActionDefaultIcon, &icons_value)) { |
| 95 if (!manifest_handler_helpers::LoadIconsFromDictionary( | 95 if (!manifest_handler_helpers::LoadIconsFromDictionary( |
| 96 icons_value, | 96 icons_value, |
| 97 extension_misc::kExtensionActionIconSizes, | 97 extension_misc::kExtensionActionIconSizes, |
| 98 extension_misc::kNumExtensionActionIconSizes, | 98 extension_misc::kNumExtensionActionIconSizes, |
| 99 &result->default_icon, | 99 &result->default_icon, |
| 100 error)) { | 100 error)) { |
| 101 return scoped_ptr<ActionInfo>(); | 101 return scoped_ptr<ActionInfo>(); |
| 102 } | 102 } |
| 103 } else if (dict->GetString(keys::kPageActionDefaultIcon, &default_icon) && | 103 } else if (dict->GetString(keys::kPageActionDefaultIcon, &default_icon) && |
| 104 manifest_handler_helpers::NormalizeAndValidatePath( | 104 manifest_handler_helpers::NormalizeAndValidatePath( |
| 105 &default_icon)) { | 105 &default_icon)) { |
| 106 result->default_icon.Add(extension_misc::EXTENSION_ICON_ACTION, | 106 result->default_icon.Add(extension_misc::EXTENSION_ICON_ACTION, |
| 107 default_icon); | 107 default_icon); |
| 108 } else { | 108 } else { |
| 109 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); | 109 *error = base::ASCIIToUTF16(errors::kInvalidPageActionIconPath); |
| 110 return scoped_ptr<ActionInfo>(); | 110 return scoped_ptr<ActionInfo>(); |
| 111 } | 111 } |
| 112 } | 112 } |
| 113 | 113 |
| 114 // Read the page action title from |default_title| if present, |name| if not | 114 // Read the page action title from |default_title| if present, |name| if not |
| 115 // (both optional). | 115 // (both optional). |
| 116 if (dict->HasKey(keys::kPageActionDefaultTitle)) { | 116 if (dict->HasKey(keys::kPageActionDefaultTitle)) { |
| 117 if (!dict->GetString(keys::kPageActionDefaultTitle, | 117 if (!dict->GetString(keys::kPageActionDefaultTitle, |
| 118 &result->default_title)) { | 118 &result->default_title)) { |
| 119 *error = ASCIIToUTF16(errors::kInvalidPageActionDefaultTitle); | 119 *error = base::ASCIIToUTF16(errors::kInvalidPageActionDefaultTitle); |
| 120 return scoped_ptr<ActionInfo>(); | 120 return scoped_ptr<ActionInfo>(); |
| 121 } | 121 } |
| 122 } else if (extension->manifest_version() == 1 && dict->HasKey(keys::kName)) { | 122 } else if (extension->manifest_version() == 1 && dict->HasKey(keys::kName)) { |
| 123 if (!dict->GetString(keys::kName, &result->default_title)) { | 123 if (!dict->GetString(keys::kName, &result->default_title)) { |
| 124 *error = ASCIIToUTF16(errors::kInvalidPageActionName); | 124 *error = base::ASCIIToUTF16(errors::kInvalidPageActionName); |
| 125 return scoped_ptr<ActionInfo>(); | 125 return scoped_ptr<ActionInfo>(); |
| 126 } | 126 } |
| 127 } | 127 } |
| 128 | 128 |
| 129 // Read the action's |popup| (optional). | 129 // Read the action's |popup| (optional). |
| 130 const char* popup_key = NULL; | 130 const char* popup_key = NULL; |
| 131 if (dict->HasKey(keys::kPageActionDefaultPopup)) | 131 if (dict->HasKey(keys::kPageActionDefaultPopup)) |
| 132 popup_key = keys::kPageActionDefaultPopup; | 132 popup_key = keys::kPageActionDefaultPopup; |
| 133 | 133 |
| 134 if (extension->manifest_version() == 1 && | 134 if (extension->manifest_version() == 1 && |
| (...skipping 15 matching lines...) Expand all Loading... |
| 150 if (dict->GetString(popup_key, &url_str)) { | 150 if (dict->GetString(popup_key, &url_str)) { |
| 151 // On success, |url_str| is set. Nothing else to do. | 151 // On success, |url_str| is set. Nothing else to do. |
| 152 } else if (extension->manifest_version() == 1 && | 152 } else if (extension->manifest_version() == 1 && |
| 153 dict->GetDictionary(popup_key, &popup)) { | 153 dict->GetDictionary(popup_key, &popup)) { |
| 154 if (!popup->GetString(keys::kPageActionPopupPath, &url_str)) { | 154 if (!popup->GetString(keys::kPageActionPopupPath, &url_str)) { |
| 155 *error = ErrorUtils::FormatErrorMessageUTF16( | 155 *error = ErrorUtils::FormatErrorMessageUTF16( |
| 156 errors::kInvalidPageActionPopupPath, "<missing>"); | 156 errors::kInvalidPageActionPopupPath, "<missing>"); |
| 157 return scoped_ptr<ActionInfo>(); | 157 return scoped_ptr<ActionInfo>(); |
| 158 } | 158 } |
| 159 } else { | 159 } else { |
| 160 *error = ASCIIToUTF16(errors::kInvalidPageActionPopup); | 160 *error = base::ASCIIToUTF16(errors::kInvalidPageActionPopup); |
| 161 return scoped_ptr<ActionInfo>(); | 161 return scoped_ptr<ActionInfo>(); |
| 162 } | 162 } |
| 163 | 163 |
| 164 if (!url_str.empty()) { | 164 if (!url_str.empty()) { |
| 165 // An empty string is treated as having no popup. | 165 // An empty string is treated as having no popup. |
| 166 result->default_popup_url = Extension::GetResourceURL(extension->url(), | 166 result->default_popup_url = Extension::GetResourceURL(extension->url(), |
| 167 url_str); | 167 url_str); |
| 168 if (!result->default_popup_url.is_valid()) { | 168 if (!result->default_popup_url.is_valid()) { |
| 169 *error = ErrorUtils::FormatErrorMessageUTF16( | 169 *error = ErrorUtils::FormatErrorMessageUTF16( |
| 170 errors::kInvalidPageActionPopupPath, url_str); | 170 errors::kInvalidPageActionPopupPath, url_str); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 | 225 |
| 226 // static | 226 // static |
| 227 bool ActionInfo::IsVerboseInstallMessage(const Extension* extension) { | 227 bool ActionInfo::IsVerboseInstallMessage(const Extension* extension) { |
| 228 const ActionInfo* page_action_info = GetPageActionInfo(extension); | 228 const ActionInfo* page_action_info = GetPageActionInfo(extension); |
| 229 return page_action_info && | 229 return page_action_info && |
| 230 (CommandsInfo::GetPageActionCommand(extension) || | 230 (CommandsInfo::GetPageActionCommand(extension) || |
| 231 !page_action_info->default_icon.empty()); | 231 !page_action_info->default_icon.empty()); |
| 232 } | 232 } |
| 233 | 233 |
| 234 } // namespace extensions | 234 } // namespace extensions |
| OLD | NEW |