OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/common/extensions/api/media_galleries_private/media_galleries_h
andler.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/strings/string_number_conversions.h" | |
9 #include "base/strings/string_util.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 #include "base/values.h" | |
12 #include "chrome/common/extensions/extension_constants.h" | |
13 #include "extensions/common/error_utils.h" | |
14 #include "extensions/common/manifest.h" | |
15 #include "extensions/common/manifest_constants.h" | |
16 | |
17 namespace keys = extensions::manifest_keys; | |
18 namespace errors = extensions::manifest_errors; | |
19 | |
20 namespace { | |
21 | |
22 // Stored on the Extension. | |
23 struct MediaGalleriesHandlerInfo : public extensions::Extension::ManifestData { | |
24 MediaGalleriesHandler::List media_galleries_handlers; | |
25 | |
26 MediaGalleriesHandlerInfo(); | |
27 virtual ~MediaGalleriesHandlerInfo(); | |
28 }; | |
29 | |
30 MediaGalleriesHandlerInfo::MediaGalleriesHandlerInfo() { | |
31 } | |
32 | |
33 MediaGalleriesHandlerInfo::~MediaGalleriesHandlerInfo() { | |
34 } | |
35 | |
36 MediaGalleriesHandler* LoadMediaGalleriesHandler( | |
37 const std::string& extension_id, | |
38 const base::DictionaryValue* media_galleries_handler, | |
39 base::string16* error) { | |
40 scoped_ptr<MediaGalleriesHandler> result(new MediaGalleriesHandler()); | |
41 result->set_extension_id(extension_id); | |
42 | |
43 std::string handler_id; | |
44 // Read the file action |id| (mandatory). | |
45 if (!media_galleries_handler->HasKey(keys::kPageActionId) || | |
46 !media_galleries_handler->GetString(keys::kPageActionId, &handler_id)) { | |
47 *error = base::ASCIIToUTF16(errors::kInvalidPageActionId); | |
48 return NULL; | |
49 } | |
50 result->set_id(handler_id); | |
51 | |
52 // Read the page action title from |default_title| (mandatory). | |
53 std::string title; | |
54 if (!media_galleries_handler->HasKey(keys::kPageActionDefaultTitle) || | |
55 !media_galleries_handler->GetString(keys::kPageActionDefaultTitle, | |
56 &title)) { | |
57 *error = base::ASCIIToUTF16(errors::kInvalidPageActionDefaultTitle); | |
58 return NULL; | |
59 } | |
60 result->set_title(title); | |
61 | |
62 std::string default_icon; | |
63 // Read the media galleries action |default_icon| (optional). | |
64 if (media_galleries_handler->HasKey(keys::kPageActionDefaultIcon)) { | |
65 if (!media_galleries_handler->GetString( | |
66 keys::kPageActionDefaultIcon, &default_icon) || | |
67 default_icon.empty()) { | |
68 *error = base::ASCIIToUTF16(errors::kInvalidPageActionIconPath); | |
69 return NULL; | |
70 } | |
71 result->set_icon_path(default_icon); | |
72 } | |
73 | |
74 return result.release(); | |
75 } | |
76 | |
77 // Loads MediaGalleriesHandlers from |extension_actions| into a list in | |
78 // |result|. | |
79 bool LoadMediaGalleriesHandlers( | |
80 const std::string& extension_id, | |
81 const base::ListValue* extension_actions, | |
82 MediaGalleriesHandler::List* result, | |
83 base::string16* error) { | |
84 for (base::ListValue::const_iterator iter = extension_actions->begin(); | |
85 iter != extension_actions->end(); | |
86 ++iter) { | |
87 if (!(*iter)->IsType(base::Value::TYPE_DICTIONARY)) { | |
88 *error = base::ASCIIToUTF16(errors::kInvalidMediaGalleriesHandler); | |
89 return false; | |
90 } | |
91 scoped_ptr<MediaGalleriesHandler> action( | |
92 LoadMediaGalleriesHandler( | |
93 extension_id, | |
94 reinterpret_cast<base::DictionaryValue*>(*iter), error)); | |
95 if (!action) | |
96 return false; // Failed to parse media galleries action definition. | |
97 result->push_back(linked_ptr<MediaGalleriesHandler>(action.release())); | |
98 } | |
99 return true; | |
100 } | |
101 | |
102 } // namespace | |
103 | |
104 MediaGalleriesHandler::MediaGalleriesHandler() { | |
105 } | |
106 | |
107 MediaGalleriesHandler::~MediaGalleriesHandler() { | |
108 } | |
109 | |
110 // static | |
111 MediaGalleriesHandler::List* | |
112 MediaGalleriesHandler::GetHandlers(const extensions::Extension* extension) { | |
113 MediaGalleriesHandlerInfo* info = static_cast<MediaGalleriesHandlerInfo*>( | |
114 extension->GetManifestData(keys::kMediaGalleriesHandlers)); | |
115 if (info) | |
116 return &info->media_galleries_handlers; | |
117 return NULL; | |
118 } | |
119 | |
120 MediaGalleriesHandlerParser::MediaGalleriesHandlerParser() { | |
121 } | |
122 | |
123 MediaGalleriesHandlerParser::~MediaGalleriesHandlerParser() { | |
124 } | |
125 | |
126 bool MediaGalleriesHandlerParser::Parse(extensions::Extension* extension, | |
127 base::string16* error) { | |
128 const base::ListValue* media_galleries_handlers_value = NULL; | |
129 if (!extension->manifest()->GetList(keys::kMediaGalleriesHandlers, | |
130 &media_galleries_handlers_value)) { | |
131 *error = base::ASCIIToUTF16(errors::kInvalidMediaGalleriesHandler); | |
132 return false; | |
133 } | |
134 scoped_ptr<MediaGalleriesHandlerInfo> info(new MediaGalleriesHandlerInfo); | |
135 if (!LoadMediaGalleriesHandlers(extension->id(), | |
136 media_galleries_handlers_value, | |
137 &info->media_galleries_handlers, | |
138 error)) { | |
139 return false; // Failed to parse media galleries actions definition. | |
140 } | |
141 | |
142 extension->SetManifestData(keys::kMediaGalleriesHandlers, info.release()); | |
143 return true; | |
144 } | |
145 | |
146 const std::vector<std::string> MediaGalleriesHandlerParser::Keys() const { | |
147 return SingleKey(keys::kMediaGalleriesHandlers); | |
148 } | |
OLD | NEW |