Home | History | Annotate | Download | only in plugins
      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 
     15 namespace {
     16 
     17 // Delay on first fetch so we don't interfere with startup.
     18 const int kStartResourceFetchDelayMs = 60 * 1000;
     19 
     20 // Delay between calls to update the cache 1 day and 2 minutes in testing mode.
     21 const int kCacheUpdateDelayMs = 24 * 60 * 60 * 1000;
     22 const int kTestCacheUpdateDelayMs = 2 * 60 * 1000;
     23 
     24 const char kPluginsServerUrl[] =
     25     "https://www.gstatic.com/chrome/config/plugins_2/";
     26 
     27 bool IsTest() {
     28   return CommandLine::ForCurrentProcess()->HasSwitch(
     29       switches::kPluginsMetadataServerURL);
     30 }
     31 
     32 GURL 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 
     50 int GetCacheUpdateDelay() {
     51   return IsTest() ? kTestCacheUpdateDelayMs : kCacheUpdateDelayMs;
     52 }
     53 
     54 }  // namespace
     55 
     56 PluginsResourceService::PluginsResourceService(PrefService* local_state)
     57     : WebResourceService(local_state,
     58                          GetPluginsServerURL(),
     59                          false,
     60                          prefs::kPluginsResourceCacheUpdate,
     61                          kStartResourceFetchDelayMs,
     62                          GetCacheUpdateDelay()) {
     63 }
     64 
     65 void PluginsResourceService::Init() {
     66   const base::DictionaryValue* metadata =
     67       prefs_->GetDictionary(prefs::kPluginsMetadata);
     68   PluginFinder::GetInstance()->ReinitializePlugins(metadata);
     69   StartAfterDelay();
     70 }
     71 
     72 PluginsResourceService::~PluginsResourceService() {
     73 }
     74 
     75 // static
     76 void PluginsResourceService::RegisterPrefs(PrefRegistrySimple* registry) {
     77   registry->RegisterDictionaryPref(prefs::kPluginsMetadata,
     78                                    new base::DictionaryValue());
     79   registry->RegisterStringPref(prefs::kPluginsResourceCacheUpdate, "0");
     80 }
     81 
     82 void PluginsResourceService::Unpack(const base::DictionaryValue& parsed_json) {
     83   prefs_->Set(prefs::kPluginsMetadata, parsed_json);
     84   PluginFinder::GetInstance()->ReinitializePlugins(&parsed_json);
     85 }
     86