1// Copyright (c) 2012 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/plugins/plugins_resource_service.h" 6 7#include "base/command_line.h" 8#include "base/prefs/pref_registry_simple.h" 9#include "base/prefs/pref_service.h" 10#include "chrome/browser/plugins/plugin_finder.h" 11#include "chrome/common/chrome_switches.h" 12#include "chrome/common/pref_names.h" 13#include "url/gurl.h" 14 15namespace { 16 17// Delay on first fetch so we don't interfere with startup. 18const int kStartResourceFetchDelayMs = 60 * 1000; 19 20// Delay between calls to update the cache 1 day and 2 minutes in testing mode. 21const int kCacheUpdateDelayMs = 24 * 60 * 60 * 1000; 22const int kTestCacheUpdateDelayMs = 2 * 60 * 1000; 23 24const char kPluginsServerUrl[] = 25 "https://www.gstatic.com/chrome/config/plugins_2/"; 26 27bool IsTest() { 28 return CommandLine::ForCurrentProcess()->HasSwitch( 29 switches::kPluginsMetadataServerURL); 30} 31 32GURL GetPluginsServerURL() { 33 std::string filename; 34#if defined(OS_WIN) 35 filename = "plugins_win.json"; 36#elif defined(OS_LINUX) 37 filename = "plugins_linux.json"; 38#elif defined(OS_MACOSX) 39 filename = "plugins_mac.json"; 40#else 41#error Unknown platform 42#endif 43 44 std::string test_url = 45 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 46 switches::kPluginsMetadataServerURL); 47 return GURL(IsTest() ? test_url : kPluginsServerUrl + filename); 48} 49 50int GetCacheUpdateDelay() { 51 return IsTest() ? kTestCacheUpdateDelayMs : kCacheUpdateDelayMs; 52} 53 54} // namespace 55 56PluginsResourceService::PluginsResourceService(PrefService* local_state) 57 : WebResourceService(local_state, 58 GetPluginsServerURL(), 59 false, 60 prefs::kPluginsResourceCacheUpdate, 61 kStartResourceFetchDelayMs, 62 GetCacheUpdateDelay()) { 63} 64 65void PluginsResourceService::Init() { 66 const base::DictionaryValue* metadata = 67 prefs_->GetDictionary(prefs::kPluginsMetadata); 68 PluginFinder::GetInstance()->ReinitializePlugins(metadata); 69 StartAfterDelay(); 70} 71 72PluginsResourceService::~PluginsResourceService() { 73} 74 75// static 76void PluginsResourceService::RegisterPrefs(PrefRegistrySimple* registry) { 77 registry->RegisterDictionaryPref(prefs::kPluginsMetadata, 78 new base::DictionaryValue()); 79 registry->RegisterStringPref(prefs::kPluginsResourceCacheUpdate, "0"); 80} 81 82void PluginsResourceService::Unpack(const base::DictionaryValue& parsed_json) { 83 prefs_->Set(prefs::kPluginsMetadata, parsed_json); 84 PluginFinder::GetInstance()->ReinitializePlugins(&parsed_json); 85} 86