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