Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1208)

Unified Diff: chrome/browser/extensions/api/developer_private/developer_private_mangle.cc

Issue 989813002: [Extensions] Make a chrome.developerPrivate.getExtensionsInfo function (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/developer_private/developer_private_mangle.cc
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_mangle.cc b/chrome/browser/extensions/api/developer_private/developer_private_mangle.cc
new file mode 100644
index 0000000000000000000000000000000000000000..aa1bcdbda2157aa2a9481988a0a0a4e5ab914b67
--- /dev/null
+++ b/chrome/browser/extensions/api/developer_private/developer_private_mangle.cc
@@ -0,0 +1,127 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/developer_private/developer_private_mangle.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "chrome/common/extensions/api/developer_private.h"
+#include "extensions/browser/extension_error.h"
+#include "extensions/common/constants.h"
+
+namespace extensions {
+namespace developer_private_mangle {
+
+linked_ptr<api::developer_private::ItemInfo> MangleExtensionInfo(
+ const api::developer_private::ExtensionInfo& info) {
+ linked_ptr<api::developer_private::ItemInfo> result(
+ new api::developer_private::ItemInfo());
+ result->id = info.id;
+ result->name = info.name;
+ result->version = info.version;
+ result->description = info.description;
+ result->may_disable = info.user_may_modify;
+ result->enabled =
+ info.state == api::developer_private::EXTENSION_STATE_ENABLED;
+ switch (info.type) {
+ case api::developer_private::EXTENSION_TYPE_HOSTED_APP:
+ result->type = api::developer_private::ITEM_TYPE_HOSTED_APP;
+ result->is_app = true;
+ break;
+ case api::developer_private::EXTENSION_TYPE_PLATFORM_APP:
+ result->type = api::developer_private::ITEM_TYPE_PACKAGED_APP;
+ result->is_app = true;
+ break;
+ case api::developer_private::EXTENSION_TYPE_LEGACY_PACKAGED_APP:
+ result->type = api::developer_private::ITEM_TYPE_LEGACY_PACKAGED_APP;
+ result->is_app = true;
+ break;
+ case api::developer_private::EXTENSION_TYPE_EXTENSION:
+ result->type = api::developer_private::ITEM_TYPE_EXTENSION;
+ result->is_app = false;
+ break;
+ case api::developer_private::EXTENSION_TYPE_THEME:
+ result->type = api::developer_private::ITEM_TYPE_THEME;
+ result->is_app = false;
+ break;
+ case api::developer_private::EXTENSION_TYPE_SHARED_MODULE:
+ // Old api doesn't account for this.
+ break;
+ default:
+ NOTREACHED();
+ }
+ result->allow_file_access = info.file_access.is_enabled;
+ result->wants_file_access = info.file_access.is_active;
+
+ result->incognito_enabled = info.incognito_access.is_active;
+ result->allow_incognito = info.incognito_access.is_enabled;
+
+ result->is_unpacked =
+ info.location == api::developer_private::LOCATION_UNPACKED;
+ result->allow_reload = result->is_unpacked;
+ result->terminated =
+ info.state == api::developer_private::EXTENSION_STATE_TERMINATED;
+
+ if (info.path)
+ result->path.reset(new std::string(*info.path));
+ if (info.options_page)
+ result->options_url.reset(new std::string(info.options_page->url));
+ if (info.launch_url)
+ result->app_launch_url.reset(new std::string(*info.launch_url));
+ if (!info.home_page.url.empty())
+ result->homepage_url.reset(new std::string(info.home_page.url));
+ result->update_url.reset(new std::string(info.update_url));
+ for (const std::string& str_warning : info.install_warnings) {
+ scoped_ptr<api::developer_private::InstallWarning> warning(
+ new api::developer_private::InstallWarning());
+ warning->message = str_warning;
+ result->install_warnings.push_back(make_linked_ptr(warning.release()));
+ }
+ for (const linked_ptr<api::developer_private::ManifestError>& error :
+ info.manifest_errors) {
+ CHECK(error.get());
+ scoped_ptr<base::DictionaryValue> value = error->ToValue();
+ value->SetInteger("type", static_cast<int>(ExtensionError::MANIFEST_ERROR));
+ value->SetInteger("level", static_cast<int>(logging::LOG_WARNING));
+ result->manifest_errors.push_back(make_linked_ptr(value.release()));
+ }
+ for (const linked_ptr<api::developer_private::RuntimeError>& error :
+ info.runtime_errors) {
+ CHECK(error.get());
+ scoped_ptr<base::DictionaryValue> value = error->ToValue();
+ value->SetInteger("type", static_cast<int>(ExtensionError::RUNTIME_ERROR));
+ logging::LogSeverity severity = logging::LOG_INFO;
+ if (error->severity == api::developer_private::ERROR_LEVEL_WARN)
+ severity = logging::LOG_WARNING;
+ else if (error->severity == api::developer_private::ERROR_LEVEL_ERROR)
+ severity = logging::LOG_ERROR;
+ value->SetInteger("level", static_cast<int>(severity));
+ result->runtime_errors.push_back(make_linked_ptr(value.release()));
+ }
+ result->offline_enabled = info.offline_enabled;
+ for (const linked_ptr<api::developer_private::ExtensionView>& view :
+ info.views) {
+ linked_ptr<api::developer_private::ItemInspectView> view_copy(
+ new api::developer_private::ItemInspectView());
+ GURL url(view->url);
+ if (url.scheme() == kExtensionScheme) {
+ // No leading slash.
+ view_copy->path = url.path().substr(1);
+ } else {
+ // For live pages, use the full URL.
+ view_copy->path = url.spec();
+ }
+ view_copy->render_process_id = view->render_process_id;
+ view_copy->render_view_id = view->render_view_id;
+ view_copy->incognito = view->incognito;
+ view_copy->generated_background_page =
+ view_copy->path == kGeneratedBackgroundPageFilename;
+ result->views.push_back(view_copy);
+ }
+
+ return result;
+}
+
+} // namespace developer_private_mangle
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698