12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/location.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/prefs/pref_service.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/media_galleries_private/media_galleries_private_event_router.h" 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/extension_util.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_file_system_registry.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/extension_function.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::DictionaryValue; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::ListValue; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace AddGalleryWatch = 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::api::media_galleries_private::AddGalleryWatch; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace RemoveGalleryWatch = 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::api::media_galleries_private::RemoveGalleryWatch; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace GetAllGalleryWatch = 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::api::media_galleries_private::GetAllGalleryWatch; 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace media_galleries_private = 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) api::media_galleries_private; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kInvalidGalleryIDError[] = "Invalid gallery ID"; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Handles the profile shutdown event on the file thread to clean up 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// GalleryWatchManager. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void HandleProfileShutdownOnFileThread(void* profile_id) { 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GalleryWatchManager::OnProfileShutdown(profile_id); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns true and sets |gallery_file_path| and |gallery_pref_id| if the 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// |gallery_id| is valid and returns false otherwise. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetGalleryFilePathAndId(const std::string& gallery_id, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile, 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Extension* extension, 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* gallery_file_path, 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId* gallery_pref_id) { 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!base::StringToUint64(gallery_id, &pref_id)) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences(profile); 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath file_path( 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->LookUpGalleryPathForExtension(pref_id, extension, false)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (file_path.empty()) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *gallery_pref_id = pref_id; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *gallery_file_path = file_path; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MediaGalleriesPrivateAPI // 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaGalleriesPrivateAPI::MediaGalleriesPrivateAPI( 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::BrowserContext* context) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : profile_(Profile::FromBrowserContext(context)), weak_ptr_factory_(this) { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(profile_); 840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventRouter* event_router = EventRouter::Get(profile_); 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event_router->RegisterObserver( 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) this, media_galleries_private::OnGalleryChanged::kEventName); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateAPI::~MediaGalleriesPrivateAPI() { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MediaGalleriesPrivateAPI::Shutdown() { 930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventRouter::Get(profile_)->UnregisterObserver(this); 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) weak_ptr_factory_.InvalidateWeakPtrs(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::PostTask( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::FILE, FROM_HERE, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&HandleProfileShutdownOnFileThread, profile_)); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static base::LazyInstance< 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserContextKeyedAPIFactory<MediaGalleriesPrivateAPI> > g_factory = 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LAZY_INSTANCE_INITIALIZER; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)BrowserContextKeyedAPIFactory<MediaGalleriesPrivateAPI>* 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaGalleriesPrivateAPI::GetFactoryInstance() { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return g_factory.Pointer(); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MediaGalleriesPrivateAPI* MediaGalleriesPrivateAPI::Get( 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::BrowserContext* context) { 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return BrowserContextKeyedAPIFactory<MediaGalleriesPrivateAPI>::Get(context); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MediaGalleriesPrivateAPI::OnListenerAdded( 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const EventListenerInfo& details) { 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make sure MediaGalleriesPreferences is initialized. After that, 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // try to initialize the event router for the listener. 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This method is called synchronously with the message handler for the 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // JS invocation. 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences(profile_); 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(base::Bind( 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &MediaGalleriesPrivateAPI::MaybeInitializeEventRouterAndTracker, 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateEventRouter* MediaGalleriesPrivateAPI::GetEventRouter() { 131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MaybeInitializeEventRouterAndTracker(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return media_galleries_private_event_router_.get(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GalleryWatchStateTracker* 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateAPI::GetGalleryWatchStateTracker() { 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MaybeInitializeEventRouterAndTracker(); 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return tracker_.get(); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void MediaGalleriesPrivateAPI::MaybeInitializeEventRouterAndTracker() { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (media_galleries_private_event_router_.get()) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_galleries_private_event_router_.reset( 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new MediaGalleriesPrivateEventRouter(profile_)); 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(g_browser_process->media_file_system_registry()-> 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetPreferences(profile_)->IsInitialized()); 148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) tracker_.reset( 149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new GalleryWatchStateTracker(profile_)); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MediaGalleriesPrivateAddGalleryWatchFunction // 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateAddGalleryWatchFunction:: 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)~MediaGalleriesPrivateAddGalleryWatchFunction() { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool MediaGalleriesPrivateAddGalleryWatchFunction::RunAsync() { 1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(GetProfile()); 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_view_host() || !render_view_host()->GetProcess()) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<AddGalleryWatch::Params> params( 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddGalleryWatch::Params::Create(*args_)); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params.get()); 168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile()); 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(base::Bind( 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit, 174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this, 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params->gallery_id)); 176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferencesInit( 181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string& pref_id) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath gallery_file_path; 183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId gallery_pref_id = 0; 1841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!GetGalleryFilePathAndId(pref_id, 1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile(), 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension(), 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &gallery_file_path, 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &gallery_pref_id)) { 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_ = kInvalidGalleryIDError; 190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HandleResponse(gallery_pref_id, false); 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesPrivateEventRouter* router = 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) MediaGalleriesPrivateAPI::Get(GetProfile())->GetEventRouter(); 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(tommycli): The new GalleryWatchManager no longer checks that there is 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // an event listener attached. There should be a check for that here. 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(router); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::PostTaskAndReplyWithResult( 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::FILE, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&GalleryWatchManager::SetupGalleryWatch, 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile(), 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_pref_id, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_file_path, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_id(), 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) router->AsWeakPtr()), 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse, 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_pref_id)); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse( 216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId gallery_id, 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool success) { 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) media_galleries_private::AddGalleryWatchResult result; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.gallery_id = base::Uint64ToString(gallery_id); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.success = success; 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetResult(result.ToValue().release()); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (success) { 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(g_browser_process->media_file_system_registry() 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->GetPreferences(GetProfile()) 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ->IsInitialized()); 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile())->GetGalleryWatchStateTracker(); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_tracker->OnGalleryWatchAdded(extension_id(), gallery_id); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendResponse(true); 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MediaGalleriesPrivateRemoveGalleryWatchFunction // 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateRemoveGalleryWatchFunction:: 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)~MediaGalleriesPrivateRemoveGalleryWatchFunction() { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunAsync() { 244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_view_host() || !render_view_host()->GetProcess()) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RemoveGalleryWatch::Params> params( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveGalleryWatch::Params::Create(*args_)); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params.get()); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile()); 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(base::Bind( 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit, 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this, 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) params->gallery_id)); 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferencesInit( 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string& pref_id) { 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath gallery_file_path; 265d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId gallery_pref_id = 0; 2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!GetGalleryFilePathAndId(pref_id, 2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile(), 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension(), 2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &gallery_file_path, 2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &gallery_pref_id)) { 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_ = kInvalidGalleryIDError; 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SendResponse(false); 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::PostTask( 2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::BrowserThread::FILE, 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FROM_HERE, 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&GalleryWatchManager::RemoveGalleryWatch, 2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile(), 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gallery_file_path, 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_id())); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile())->GetGalleryWatchStateTracker(); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_tracker->OnGalleryWatchRemoved(extension_id(), gallery_pref_id); 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SendResponse(true); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MediaGalleriesPrivateGetAllGalleryWatchFunction // 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateGetAllGalleryWatchFunction:: 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)~MediaGalleriesPrivateGetAllGalleryWatchFunction() { 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool MediaGalleriesPrivateGetAllGalleryWatchFunction::RunAsync() { 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_view_host() || !render_view_host()->GetProcess()) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 3041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile()); 3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(base::Bind( 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit, 308868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this)); 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 310868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 311868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void MediaGalleriesPrivateGetAllGalleryWatchFunction::OnPreferencesInit() { 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> result; 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile())->GetGalleryWatchStateTracker(); 316d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefIdSet gallery_ids = 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_tracker->GetAllWatchedGalleryIDsForExtension(extension_id()); 318d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (MediaGalleryPrefIdSet::const_iterator iter = gallery_ids.begin(); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter != gallery_ids.end(); ++iter) { 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result.push_back(base::Uint64ToString(*iter)); 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) results_ = GetAllGalleryWatch::Results::Create(result); 323868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SendResponse(true); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MediaGalleriesPrivateRemoveAllGalleryWatchFunction // 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MediaGalleriesPrivateRemoveAllGalleryWatchFunction:: 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)~MediaGalleriesPrivateRemoveAllGalleryWatchFunction() { 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool MediaGalleriesPrivateRemoveAllGalleryWatchFunction::RunAsync() { 335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_view_host() || !render_view_host()->GetProcess()) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 3401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 3411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile()); 3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) preferences->EnsureInitialized(base::Bind( 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit, 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this)); 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void MediaGalleriesPrivateRemoveAllGalleryWatchFunction::OnPreferencesInit() { 3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MediaGalleriesPreferences* preferences = 3501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->media_file_system_registry()->GetPreferences( 3511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile()); 3521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GalleryWatchStateTracker* state_tracker = MediaGalleriesPrivateAPI::Get( 3531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProfile())->GetGalleryWatchStateTracker(); 354868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) state_tracker->RemoveAllGalleryWatchersForExtension( 355868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extension_id(), preferences); 356868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SendResponse(true); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 360