diagnostics_model.cc revision 3240926e260ce088908e02ac07a6cf7b0c0cbf44
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/diagnostics/diagnostics_model.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/diagnostics/diagnostics_test.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/diagnostics/recon_diagnostics.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/diagnostics/sqlite_diagnostics.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace diagnostics { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch// This is the count of diagnostic tests on each platform. This should 253240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch// only be used by testing code. 263240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(OS_WIN) 273240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 19; 283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#elif defined(OS_MACOSX) 293240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 15; 303240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#elif defined(OS_POSIX) 313240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(OS_CHROMEOS) 323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 19; 333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#else 343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 17; 353240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 363240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#endif 373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Embodies the commonalities of the model across platforms. It manages the 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// list of tests and can loop over them. The main job of the platform specific 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// code becomes: 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// 1- Inserting the appropriate tests into |tests_| 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// 2- Overriding RunTest() to wrap it with the appropriate fatal exception 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// handler for the OS. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class owns the all the tests and will only delete them upon 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// destruction. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelImpl : public DiagnosticsModel { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DiagnosticsModelImpl() : tests_run_(0) {} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DiagnosticsModelImpl() { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STLDeleteElements(&tests_); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual int GetTestRunCount() const OVERRIDE { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tests_run_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual int GetTestAvailableCount() const OVERRIDE { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tests_.size(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RunAll(DiagnosticsModel::Observer* observer) OVERRIDE { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t test_count = tests_.size(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t ix = 0; ix != test_count; ++ix) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool do_next = RunTest(tests_[ix], observer, ix); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++tests_run_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!do_next) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (observer) 733240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch observer->OnAllTestsDone(this); 743240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void RecoverAll(DiagnosticsModel::Observer* observer) OVERRIDE { 773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch size_t test_count = tests_.size(); 783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (size_t i = 0; i != test_count; ++i) { 793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool do_next = RunRecovery(tests_[i], observer, i); 803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (!do_next) 813240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch break; 823240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 833240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (observer) 843240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch observer->OnAllRecoveryDone(this); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 873240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual const TestInfo& GetTest(size_t index) const OVERRIDE { 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return *tests_[index]; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual bool GetTestInfo(const std::string& id, 923240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const TestInfo** result) const OVERRIDE { 933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (size_t i = 0; i < tests_.size(); i++) { 943240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (tests_[i]->GetId() == id) { 953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch *result = tests_[i]; 963240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return true; 973240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 983240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 993240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return false; 1003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1033240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Run a particular diagnostic test. Return false if no other tests should be 1043240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // run. 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual bool RunTest(DiagnosticsTest* test, 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Observer* observer, 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t index) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test->Execute(observer, this, index); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Recover from a particular diagnostic test. Return false if no further 1123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // recovery should be run. 1133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual bool RunRecovery(DiagnosticsTest* test, 1143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Observer* observer, 1153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch size_t index) { 1163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return test->Recover(observer, this, index); 1173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef std::vector<DiagnosticsTest*> TestArray; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestArray tests_; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tests_run_; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelImpl); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Each platform can have their own tests. For the time being there is only 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// one test that works on all platforms. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelWin : public DiagnosticsModelImpl { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelWin() { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeOperatingSystemTest()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeConflictingDllsTest()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeVersionTest()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeResourcesFileTest()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDbTest()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteArchivedHistoryDbTest()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteAppCacheDbTest()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelWin); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelMac : public DiagnosticsModelImpl { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelMac() { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDbTest()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteArchivedHistoryDbTest()); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteAppCacheDbTest()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelMac); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelPosix : public DiagnosticsModelImpl { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelPosix() { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeVersionTest()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeResourcesFileTest()); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDbTest()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteArchivedHistoryDbTest()); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteAppCacheDbTest()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_CHROMEOS) 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tests_.push_back(MakeSqliteNssCertDbTest()); 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tests_.push_back(MakeSqliteNssKeyDbTest()); 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelPosix); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DiagnosticsModel* MakeDiagnosticsModel(const CommandLine& cmdline) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_data_dir = 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmdline.GetSwitchValuePath(switches::kUserDataDir); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!user_data_dir.empty()) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Override(chrome::DIR_USER_DATA, user_data_dir); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelWin(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelMac(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelPosix(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace diagnostics 233