| Index: chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
|
| diff --git a/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc b/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..07b2e8cb7a7b950b1b7d8142b663f6a9903198c9
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
|
| @@ -0,0 +1,160 @@
|
| +// Copyright (c) 2013 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/feedback_private/feedback_private_api.h"
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/extensions/api/feedback_private/feedback_service.h"
|
| +#include "chrome/browser/extensions/event_names.h"
|
| +#include "chrome/browser/extensions/event_router.h"
|
| +#include "chrome/browser/extensions/extension_system.h"
|
| +#include "googleurl/src/url_util.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/webui/web_ui_util.h"
|
| +
|
| +
|
| +namespace extensions {
|
| +
|
| +using api::feedback_private::SystemInformation;
|
| +using api::feedback_private::FeedbackInfo;
|
| +
|
| +static base::LazyInstance<ProfileKeyedAPIFactory<FeedbackPrivateAPI> >
|
| + g_factory = LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +// static
|
| +ProfileKeyedAPIFactory<FeedbackPrivateAPI>*
|
| + FeedbackPrivateAPI::GetFactoryInstance() {
|
| + return &g_factory.Get();
|
| +}
|
| +
|
| +FeedbackPrivateAPI::FeedbackPrivateAPI(Profile* profile)
|
| + : profile_(profile),
|
| + service_(FeedbackService::CreateInstance()) {
|
| +}
|
| +
|
| +FeedbackPrivateAPI::~FeedbackPrivateAPI() {
|
| + delete service_;
|
| + service_ = NULL;
|
| +}
|
| +
|
| +FeedbackService* FeedbackPrivateAPI::GetService() const {
|
| + return service_;
|
| +}
|
| +
|
| +void FeedbackPrivateAPI::RequestFeedback(
|
| + const std::string& description_template,
|
| + const std::string& category_tag,
|
| + const GURL& page_url) {
|
| + if (profile_ && ExtensionSystem::Get(profile_)->event_router()) {
|
| + FeedbackInfo info;
|
| + info.description = description_template;
|
| + info.category_tag = make_scoped_ptr(new std::string(category_tag));
|
| + info.page_url = make_scoped_ptr(new std::string(page_url.spec()));
|
| +
|
| + scoped_ptr<base::ListValue> args(new base::ListValue());
|
| + args->Append(info.ToValue().release());
|
| +
|
| + scoped_ptr<Event> event(
|
| + new Event(event_names::kOnFeedbackRequested, args.Pass()));
|
| + ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(
|
| + event.Pass());
|
| + }
|
| +}
|
| +
|
| +bool FeedbackPrivateGetUserEmailFunction::RunImpl() {
|
| + FeedbackService* service =
|
| + FeedbackPrivateAPI::GetFactoryInstance()->GetForProfile(
|
| + profile())->GetService();
|
| + DCHECK(service);
|
| + SetResult(base::Value::CreateStringValue(service->GetUserEmail()));
|
| + return true;
|
| +}
|
| +
|
| +bool FeedbackPrivateGetSystemInformationFunction::RunImpl() {
|
| + FeedbackService* service =
|
| + FeedbackPrivateAPI::GetFactoryInstance()->GetForProfile(
|
| + profile())->GetService();
|
| + DCHECK(service);
|
| + service->GetSystemInformation(
|
| + base::Bind(
|
| + &FeedbackPrivateGetSystemInformationFunction::OnCompleted, this));
|
| + return true;
|
| +}
|
| +
|
| +void FeedbackPrivateGetSystemInformationFunction::OnCompleted(
|
| + const SystemInformationList& sys_info) {
|
| + results_ = api::feedback_private::GetSystemInformation::Results::Create(
|
| + sys_info);
|
| + SendResponse(true);
|
| +}
|
| +
|
| +bool FeedbackPrivateSendFeedbackFunction::RunImpl() {
|
| + scoped_ptr<api::feedback_private::SendFeedback::Params> params(
|
| + api::feedback_private::SendFeedback::Params::Create(*args_));
|
| + EXTENSION_FUNCTION_VALIDATE(params.get());
|
| +
|
| + const FeedbackInfo &feedback_info = params->feedback;
|
| +
|
| + std::string description = feedback_info.description;
|
| + std::string attached_file_url = feedback_info.attached_file_blob_url;
|
| + std::string screenshot_url = feedback_info.screenshot_blob_url;
|
| +
|
| + // Populate feedback data.
|
| + scoped_refptr<FeedbackData> feedback_data(new FeedbackData());
|
| + feedback_data->set_profile(profile_);
|
| + feedback_data->set_description(feedback_info.description);
|
| +
|
| + if (feedback_info.category_tag.get())
|
| + feedback_data->set_category_tag(*feedback_info.category_tag.get());
|
| + if (feedback_info.page_url.get())
|
| + feedback_data->set_page_url(*feedback_info.page_url.get());
|
| + if (feedback_info.email.get())
|
| + feedback_data->set_user_email(*feedback_info.email.get());
|
| +
|
| + if (feedback_info.attached_file.get() &&
|
| + !feedback_info.attached_file_blob_url.empty()) {
|
| + feedback_data->set_attached_filename(
|
| + (*feedback_info.attached_file.get()).name);
|
| + feedback_data->set_attached_file_url(
|
| + GURL(feedback_info.attached_file_blob_url));
|
| + }
|
| + feedback_data->set_screenshot_url(GURL(feedback_info.screenshot_blob_url));
|
| +
|
| + // TODO(rkc): Take this out of OS_CHROMEOS once we have FeedbackData and
|
| + // FeedbackUtil migrated to handle system logs for both Chrome and ChromeOS.
|
| +#if defined(OS_CHROMEOS)
|
| + scoped_ptr<chromeos::SystemLogsResponse> sys_logs(
|
| + new chromeos::SystemLogsResponse);
|
| + SystemInformationList* sys_info = feedback_info.system_information.get();
|
| + if (sys_info) {
|
| + for (SystemInformationList::iterator it = sys_info->begin();
|
| + it != sys_info->end(); ++it)
|
| + (*sys_logs.get())[it->get()->key] = it->get()->value;
|
| + }
|
| + feedback_data->set_sys_info(sys_logs.Pass());
|
| +#endif
|
| +
|
| + FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance()->
|
| + GetForProfile(profile())->GetService();
|
| + DCHECK(service);
|
| + service->SendFeedback(profile(),
|
| + feedback_data, base::Bind(
|
| + &FeedbackPrivateSendFeedbackFunction::OnCompleted,
|
| + this));
|
| + return true;
|
| +}
|
| +
|
| +void FeedbackPrivateSendFeedbackFunction::OnCompleted(
|
| + bool success) {
|
| + results_ = api::feedback_private::SendFeedback::Results::Create(
|
| + success ? api::feedback_private::STATUS_SUCCESS :
|
| + api::feedback_private::STATUS_DELAYED);
|
| + SendResponse(true);
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|