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/browser/ui/webui/sync_file_system_internals/file_metadata_handler.h" 6 7 #include <map> 8 9 #include "base/bind.h" 10 #include "base/bind_helpers.h" 11 #include "base/values.h" 12 #include "chrome/browser/extensions/api/sync_file_system/sync_file_system_api_helpers.h" 13 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/sync_file_system/sync_file_system_service.h" 15 #include "chrome/browser/sync_file_system/sync_file_system_service_factory.h" 16 #include "chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.h" 17 #include "content/public/browser/web_ui.h" 18 #include "content/public/browser/web_ui_data_source.h" 19 #include "extensions/common/extension.h" 20 #include "grit/sync_file_system_internals_resources.h" 21 22 using sync_file_system::RemoteFileSyncService; 23 using sync_file_system::SyncFileSystemServiceFactory; 24 using sync_file_system::SyncServiceState; 25 26 namespace syncfs_internals { 27 28 FileMetadataHandler::FileMetadataHandler(Profile* profile) 29 : profile_(profile), 30 weak_factory_(this) {} 31 32 FileMetadataHandler::~FileMetadataHandler() {} 33 34 void FileMetadataHandler::RegisterMessages() { 35 web_ui()->RegisterMessageCallback( 36 "getExtensions", 37 base::Bind(&FileMetadataHandler::GetExtensions, 38 base::Unretained(this))); 39 web_ui()->RegisterMessageCallback( 40 "getFileMetadata", 41 base::Bind(&FileMetadataHandler::GetFileMetadata, 42 base::Unretained(this))); 43 } 44 45 void FileMetadataHandler::GetFileMetadata( 46 const base::ListValue* args) { 47 std::string extension_id; 48 if (!args->GetString(0, &extension_id) || extension_id.empty()) { 49 LOG(WARNING) << "GetFileMetadata() Extension ID wasn't given"; 50 return; 51 } 52 53 // Extension ID from JS is just the host. Need to reformat it to chrome 54 // extension type GURL. 55 const GURL origin = extensions::Extension::GetBaseURLFromExtensionId( 56 extension_id); 57 58 // Get all metadata for the one specific origin. 59 sync_file_system::SyncFileSystemService* sync_service = 60 SyncFileSystemServiceFactory::GetForProfile(profile_); 61 if (!sync_service) 62 return; 63 sync_service->DumpFiles(origin, 64 base::Bind(&FileMetadataHandler::DidGetFileMetadata, 65 weak_factory_.GetWeakPtr())); 66 } 67 68 void FileMetadataHandler::GetExtensions(const base::ListValue* args) { 69 DCHECK(args); 70 ExtensionStatusesHandler::GetExtensionStatusesAsDictionary( 71 profile_, 72 base::Bind(&FileMetadataHandler::DidGetExtensions, 73 weak_factory_.GetWeakPtr())); 74 } 75 76 void FileMetadataHandler::DidGetExtensions(const base::ListValue& list) { 77 web_ui()->CallJavascriptFunction("FileMetadata.onGetExtensions", list); 78 } 79 80 void FileMetadataHandler::DidGetFileMetadata(const base::ListValue& files) { 81 web_ui()->CallJavascriptFunction("FileMetadata.onGetFileMetadata", files); 82 } 83 84 } // namespace syncfs_internals 85