17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/lazy_instance.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string_util.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/feedback_private/feedback_service.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/feedback/tracing_manager.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/url_util.h" 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace { 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Getting the filename of a blob prepends a "C:\fakepath" to the filename. 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// This is undesirable, strip it if it exists. 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)std::string StripFakepath(const std::string& path) { 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char kFakePathStr[] = "C:\\fakepath\\"; 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (StartsWithASCII(path, kFakePathStr, false)) 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return path.substr(arraysize(kFakePathStr) - 1); 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return path; 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace extensions { 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace feedback_private = api::feedback_private; 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)using feedback_private::SystemInformation; 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)using feedback_private::FeedbackInfo; 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)char kFeedbackExtensionId[] = "gfdkimpbcpahaombhbimeihdjnejgicl"; 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static base::LazyInstance<ProfileKeyedAPIFactory<FeedbackPrivateAPI> > 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) g_factory = LAZY_INSTANCE_INITIALIZER; 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileKeyedAPIFactory<FeedbackPrivateAPI>* 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FeedbackPrivateAPI::GetFactoryInstance() { 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return &g_factory.Get(); 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FeedbackPrivateAPI::FeedbackPrivateAPI(Profile* profile) 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : profile_(profile), 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) service_(FeedbackService::CreateInstance()) { 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FeedbackPrivateAPI::~FeedbackPrivateAPI() { 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete service_; 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) service_ = NULL; 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FeedbackService* FeedbackPrivateAPI::GetService() const { 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return service_; 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FeedbackPrivateAPI::RequestFeedback( 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& description_template, 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& category_tag, 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const GURL& page_url) { 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Remove logging once crbug.com/284662 is closed. 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(WARNING) << "FEEDBACK_DEBUG: Feedback requested."; 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (profile_ && ExtensionSystem::Get(profile_)->event_router()) { 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FeedbackInfo info; 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.description = description_template; 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.category_tag = make_scoped_ptr(new std::string(category_tag)); 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) info.page_url = make_scoped_ptr(new std::string(page_url.spec())); 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) info.system_information.reset(new SystemInformationList); 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The manager is only available if tracing is enabled. 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (TracingManager* manager = TracingManager::Get()) { 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) info.trace_id.reset(new int(manager->RequestTrace())); 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<base::ListValue> args(new base::ListValue()); 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) args->Append(info.ToValue().release()); 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<Event> event(new Event( 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) feedback_private::OnFeedbackRequested::kEventName, args.Pass())); 897da551c69e84cdee501ba0193ee132bc3b5b2c1dTorne (Richard Coles) event->restrict_to_browser_context = profile_; 907da551c69e84cdee501ba0193ee132bc3b5b2c1dTorne (Richard Coles) 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Remove logging once crbug.com/284662 is closed. 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(WARNING) << "FEEDBACK_DEBUG: Dispatching onFeedbackRequested event."; 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension( 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kFeedbackExtensionId, 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) event.Pass()); 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// static 1008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)base::Closure* FeedbackPrivateGetStringsFunction::test_callback_ = NULL; 1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool FeedbackPrivateGetStringsFunction::RunImpl() { 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DictionaryValue* dict = new DictionaryValue(); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetResult(dict); 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define SET_STRING(id, idr) \ 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dict->SetString(id, l10n_util::GetStringUTF16(idr)) 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("page-title", IDS_FEEDBACK_REPORT_PAGE_TITLE); 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("page-url", IDS_FEEDBACK_REPORT_URL_LABEL); 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("screenshot", IDS_FEEDBACK_SCREENSHOT_LABEL); 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("user-email", IDS_FEEDBACK_USER_EMAIL_LABEL); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SET_STRING("sys-info", 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IDS_FEEDBACK_INCLUDE_SYSTEM_INFORMATION_AND_METRICS_CHKBOX); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("attach-file-label", IDS_FEEDBACK_ATTACH_FILE_LABEL); 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("attach-file-note", IDS_FEEDBACK_ATTACH_FILE_NOTE); 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("attach-file-to-big", IDS_FEEDBACK_ATTACH_FILE_TO_BIG); 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("reading-file", IDS_FEEDBACK_READING_FILE); 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("send-report", IDS_FEEDBACK_SEND_REPORT); 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("cancel", IDS_CANCEL); 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("no-description", IDS_FEEDBACK_NO_DESCRIPTION); 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SET_STRING("privacy-note", IDS_FEEDBACK_PRIVACY_NOTE); 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SET_STRING("performance-trace", 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_FEEDBACK_INCLUDE_PERFORMANCE_TRACE_CHECKBOX); 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#undef SET_STRING 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) webui::SetFontAndTextDirection(dict); 1278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (test_callback_ && !test_callback_->is_null()) 1298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) test_callback_->Run(); 1308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return true; 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool FeedbackPrivateGetUserEmailFunction::RunImpl() { 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Remove logging once crbug.com/284662 is closed. 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(WARNING) << "FEEDBACK_DEBUG: User e-mail requested."; 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance() 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetForProfile(GetProfile()) 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetService(); 1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(service); 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetResult(new base::StringValue(service->GetUserEmail())); 1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool FeedbackPrivateGetSystemInformationFunction::RunImpl() { 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Remove logging once crbug.com/284662 is closed. 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(WARNING) << "FEEDBACK_DEBUG: System information requested."; 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance() 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetForProfile(GetProfile()) 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetService(); 1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(service); 1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) service->GetSystemInformation( 1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Bind( 1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &FeedbackPrivateGetSystemInformationFunction::OnCompleted, this)); 1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FeedbackPrivateGetSystemInformationFunction::OnCompleted( 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const SystemInformationList& sys_info) { 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) results_ = feedback_private::GetSystemInformation::Results::Create( 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sys_info); 1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SendResponse(true); 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool FeedbackPrivateSendFeedbackFunction::RunImpl() { 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<feedback_private::SendFeedback::Params> params( 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) feedback_private::SendFeedback::Params::Create(*args_)); 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params.get()); 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const FeedbackInfo &feedback_info = params->feedback; 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string attached_file_uuid; 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (feedback_info.attached_file_blob_uuid.get() && 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) !feedback_info.attached_file_blob_uuid->empty()) 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) attached_file_uuid = *feedback_info.attached_file_blob_uuid; 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string screenshot_uuid; 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (feedback_info.screenshot_blob_uuid.get() && 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) !feedback_info.screenshot_blob_uuid->empty()) 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) screenshot_uuid = *feedback_info.screenshot_blob_uuid; 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Populate feedback data. 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<FeedbackData> feedback_data(new FeedbackData()); 1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) feedback_data->set_profile(GetProfile()); 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_data->set_description(feedback_info.description); 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (feedback_info.category_tag.get()) 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_data->set_category_tag(*feedback_info.category_tag.get()); 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (feedback_info.page_url.get()) 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_data->set_page_url(*feedback_info.page_url.get()); 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (feedback_info.email.get()) 1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_data->set_user_email(*feedback_info.email.get()); 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!attached_file_uuid.empty()) { 1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) feedback_data->set_attached_filename( 1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) StripFakepath((*feedback_info.attached_file.get()).name)); 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) feedback_data->set_attached_file_uuid(attached_file_uuid); 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!screenshot_uuid.empty()) 20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) feedback_data->set_screenshot_uuid(screenshot_uuid); 20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (feedback_info.trace_id.get()) { 20468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) feedback_data->set_trace_id(*feedback_info.trace_id.get()); 20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<FeedbackData::SystemLogsMap> sys_logs( 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new FeedbackData::SystemLogsMap); 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SystemInformationList* sys_info = feedback_info.system_information.get(); 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (sys_info) { 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for (SystemInformationList::iterator it = sys_info->begin(); 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) it != sys_info->end(); ++it) 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) (*sys_logs.get())[it->get()->key] = it->get()->value; 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) feedback_data->SetAndCompressSystemInfo(sys_logs.Pass()); 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance() 2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetForProfile(GetProfile()) 2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetService(); 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(service); 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (feedback_info.send_histograms) { 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<std::string> histograms(new std::string); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service->GetHistograms(histograms.get()); 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!histograms->empty()) 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) feedback_data->SetAndCompressHistograms(histograms.Pass()); 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) service->SendFeedback( 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile(), 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) feedback_data, 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&FeedbackPrivateSendFeedbackFunction::OnCompleted, this)); 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FeedbackPrivateSendFeedbackFunction::OnCompleted( 2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success) { 2393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) results_ = feedback_private::SendFeedback::Results::Create( 2403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) success ? feedback_private::STATUS_SUCCESS : 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) feedback_private::STATUS_DELAYED); 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SendResponse(true); 2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace extensions 246