file_metadata_handler.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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/ui/webui/sync_file_system_internals/file_metadata_handler.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <map> 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/bind.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/bind_helpers.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/values.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/extensions/api/sync_file_system/sync_file_system_api_helpers.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service_factory.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/web_ui.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/web_ui_data_source.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/sync_file_system_internals_resources.h" 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using sync_file_system::RemoteFileSyncService; 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using sync_file_system::SyncFileSystemServiceFactory; 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using sync_file_system::SyncServiceState; 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace syncfs_internals { 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FileMetadataHandler::FileMetadataHandler(Profile* profile) 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : profile_(profile), 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) weak_factory_(this) {} 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)FileMetadataHandler::~FileMetadataHandler() {} 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FileMetadataHandler::RegisterMessages() { 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) web_ui()->RegisterMessageCallback( 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "getExtensions", 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&FileMetadataHandler::GetExtensions, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Unretained(this))); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch web_ui()->RegisterMessageCallback( 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) "getFileMetadata", 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Bind(&FileMetadataHandler::GetFileMetadata, 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Unretained(this))); 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FileMetadataHandler::GetFileMetadata( 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::ListValue* args) { 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string extension_id; 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!args->GetString(0, &extension_id) || extension_id.empty()) { 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LOG(WARNING) << "GetFileMetadata() Extension ID wasn't given"; 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Extension ID from JS is just the host. Need to reformat it to chrome 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // extension type GURL. 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL origin = extensions::Extension::GetBaseURLFromExtensionId( 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch extension_id); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Get all metadata for the one specific origin. 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch sync_file_system::SyncFileSystemService* sync_service = 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SyncFileSystemServiceFactory::GetForProfile(profile_); 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (!sync_service) 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch return; 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch sync_service->DumpFiles(origin, 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind(&FileMetadataHandler::DidGetFileMetadata, 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch weak_factory_.GetWeakPtr())); 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid FileMetadataHandler::GetExtensions(const base::ListValue* args) { 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(args); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExtensionStatusesHandler::GetExtensionStatusesAsDictionary( 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profile_, 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind(&FileMetadataHandler::DidGetExtensions, 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) weak_factory_.GetWeakPtr())); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FileMetadataHandler::DidGetExtensions(const base::ListValue& list) { 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch web_ui()->CallJavascriptFunction("FileMetadata.onGetExtensions", list); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FileMetadataHandler::DidGetFileMetadata(const base::ListValue& files) { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_ui()->CallJavascriptFunction("FileMetadata.onGetFileMetadata", files); 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace syncfs_internals 85