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