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) 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 17; 283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#elif defined(OS_MACOSX) 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 13; 303240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#elif defined(OS_POSIX) 313240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#if defined(OS_CHROMEOS) 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 17; 333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#else 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst int DiagnosticsModel::kDiagnosticsTestCount = 15; 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) 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~DiagnosticsModelImpl() { STLDeleteElements(&tests_); } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual int GetTestRunCount() const OVERRIDE { return tests_run_; } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual int GetTestAvailableCount() const OVERRIDE { return tests_.size(); } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RunAll(DiagnosticsModel::Observer* observer) OVERRIDE { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t test_count = tests_.size(); 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool continue_running = true; 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for (size_t i = 0; i != test_count; ++i) { 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If one of the diagnostic steps returns false, we want to 63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // mark the rest of them as "skipped" in the UMA stats. 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (continue_running) { 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) continue_running = RunTest(tests_[i], observer, i); 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ++tests_run_; 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RecordUMATestResult(static_cast<DiagnosticsTestId>(tests_[i]->GetId()), 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RESULT_SKIPPED); 71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // On other platforms, we can just bail out if a diagnostic step returns 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // false. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (observer) 793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch observer->OnAllTestsDone(this); 803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 813240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 823240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void RecoverAll(DiagnosticsModel::Observer* observer) OVERRIDE { 833240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch size_t test_count = tests_.size(); 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool continue_running = true; 853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (size_t i = 0; i != test_count; ++i) { 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If one of the recovery steps returns false, we want to 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // mark the rest of them as "skipped" in the UMA stats. 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (continue_running) { 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) continue_running = RunRecovery(tests_[i], observer, i); 90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#if defined(OS_CHROMEOS) // Only collecting UMA stats on ChromeOS 92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RecordUMARecoveryResult( 93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static_cast<DiagnosticsTestId>(tests_[i]->GetId()), RESULT_SKIPPED); 94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else 95424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // On other platforms, we can just bail out if a recovery step returns 96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // false. 973240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch break; 98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif 99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 1003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (observer) 1023240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch observer->OnAllRecoveryDone(this); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1053240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual const TestInfo& GetTest(size_t index) const OVERRIDE { 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return *tests_[index]; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual bool GetTestInfo(int id, const TestInfo** result) const OVERRIDE { 110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(id < DIAGNOSTICS_TEST_ID_COUNT); 111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(id >= 0); 1123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (size_t i = 0; i < tests_.size(); i++) { 1133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch if (tests_[i]->GetId() == id) { 1143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch *result = tests_[i]; 1153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return true; 1163240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return false; 1193240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1203240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Run a particular diagnostic test. Return false if no other tests should be 1233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // run. 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual bool RunTest(DiagnosticsTest* test, 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Observer* observer, 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t index) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return test->Execute(observer, this, index); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1303240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Recover from a particular diagnostic test. Return false if no further 1313240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // recovery should be run. 1323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual bool RunRecovery(DiagnosticsTest* test, 1333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch Observer* observer, 1343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch size_t index) { 1353240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch return test->Recover(observer, this, index); 1363240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch } 1373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef std::vector<DiagnosticsTest*> TestArray; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestArray tests_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tests_run_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelImpl); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Each platform can have their own tests. For the time being there is only 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// one test that works on all platforms. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelWin : public DiagnosticsModelImpl { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelWin() { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeOperatingSystemTest()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeConflictingDllsTest()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeVersionTest()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeResourcesFileTest()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) tests_.push_back(MakeSqliteWebDataDbTest()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelWin); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelMac : public DiagnosticsModelImpl { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelMac() { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) tests_.push_back(MakeSqliteWebDataDbTest()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelMac); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DiagnosticsModelPosix : public DiagnosticsModelImpl { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DiagnosticsModelPosix() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeInstallTypeTest()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeVersionTest()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeUserDirTest()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateFileTest()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDictonaryDirTest()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeResourcesFileTest()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeDiskSpaceTest()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakePreferencesTest()); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeLocalStateTest()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeBookMarksTest()); 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) tests_.push_back(MakeSqliteWebDataDbTest()); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteCookiesDbTest()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteHistoryDbTest()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteThumbnailsDbTest()); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests_.push_back(MakeSqliteWebDatabaseTrackerDbTest()); 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#if defined(OS_CHROMEOS) 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tests_.push_back(MakeSqliteNssCertDbTest()); 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tests_.push_back(MakeSqliteNssKeyDbTest()); 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DiagnosticsModelPosix); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DiagnosticsModel* MakeDiagnosticsModel(const CommandLine& cmdline) { 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_data_dir = 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cmdline.GetSwitchValuePath(switches::kUserDataDir); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!user_data_dir.empty()) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Override(chrome::DIR_USER_DATA, user_data_dir); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelWin(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelMac(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new DiagnosticsModelPosix(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace diagnostics 246