15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/plugins_resource_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_finder.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delay on first fetch so we don't interfere with startup. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kStartResourceFetchDelayMs = 60 * 1000; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delay between calls to update the cache 1 day and 2 minutes in testing mode. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kCacheUpdateDelayMs = 24 * 60 * 60 * 1000; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kTestCacheUpdateDelayMs = 2 * 60 * 1000; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kPluginsServerUrl[] = 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://www.gstatic.com/chrome/config/plugins_2/"; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsTest() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CommandLine::ForCurrentProcess()->HasSwitch( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPluginsMetadataServerURL); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL GetPluginsServerURL() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filename; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename = "plugins_win.json"; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename = "plugins_linux.json"; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename = "plugins_mac.json"; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#error Unknown platform 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_url = 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kPluginsMetadataServerURL); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GURL(IsTest() ? test_url : kPluginsServerUrl + filename); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCacheUpdateDelay() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsTest() ? kTestCacheUpdateDelayMs : kCacheUpdateDelayMs; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PluginsResourceService::PluginsResourceService(PrefService* local_state) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : WebResourceService(local_state, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPluginsServerURL(), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kPluginsResourceCacheUpdate, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kStartResourceFetchDelayMs, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCacheUpdateDelay()) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PluginsResourceService::Init() { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* metadata = 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs_->GetDictionary(prefs::kPluginsMetadata); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PluginFinder::GetInstance()->ReinitializePlugins(metadata); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartAfterDelay(); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PluginsResourceService::~PluginsResourceService() { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PluginsResourceService::RegisterPrefs(PrefRegistrySimple* registry) { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterDictionaryPref(prefs::kPluginsMetadata, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::DictionaryValue()); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterStringPref(prefs::kPluginsResourceCacheUpdate, "0"); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PluginsResourceService::Unpack(const DictionaryValue& parsed_json) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_->Set(prefs::kPluginsMetadata, parsed_json); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PluginFinder::GetInstance()->ReinitializePlugins(&parsed_json); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 86