1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBDATA_COMMON_WEB_DATA_SERVICE_BASE_H_
#define COMPONENTS_WEBDATA_COMMON_WEB_DATA_SERVICE_BASE_H_
#include "base/functional/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_delete_on_sequence.h"
#include "components/webdata/common/webdata_export.h"
#include "sql/init_status.h"
class WebDatabase;
class WebDatabaseService;
namespace base {
class SequencedTaskRunner;
}
// Base for WebDataService class hierarchy.
// WebDataServiceBase is destroyed on the UI sequence.
class WEBDATA_EXPORT WebDataServiceBase
: public base::RefCountedDeleteOnSequence<WebDataServiceBase> {
public:
// All requests return an opaque handle of the following type.
typedef int Handle;
// Users of this class may provide a callback to handle errors
// (e.g. by showing a UI). The callback is called only on error, and
// takes a single parameter, the sql::InitStatus value from trying
// to open the database.
// TODO(joi): Should we combine this with WebDatabaseService::InitCallback?
using ProfileErrorCallback =
base::OnceCallback<void(sql::InitStatus, const std::string&)>;
// |callback| will only be invoked on error, and only if
// |callback.is_null()| evaluates to false.
//
// The ownership of |wdbs| is shared, with the primary owner being the
// WebDataServiceWrapper, and secondary owners being subclasses of
// WebDataServiceBase, which receive |wdbs| upon construction. The
// WebDataServiceWrapper handles the initializing and shutting down and of
// the |wdbs| object.
// WebDataServiceBase is destroyed on the UI sequence.
WebDataServiceBase(
scoped_refptr<WebDatabaseService> wdbs,
const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner);
WebDataServiceBase(const WebDataServiceBase&) = delete;
WebDataServiceBase& operator=(const WebDataServiceBase&) = delete;
// Cancel any pending request. You need to call this method if your
// WebDataServiceConsumer is about to be deleted.
virtual void CancelRequest(Handle h);
// Shutdown the web data service. The service can no longer be used after this
// call.
virtual void ShutdownOnUISequence();
// Initializes the web data service, invoking `callback` if there are any
// errors.
void Init(ProfileErrorCallback callback);
// Unloads the database and shuts down service.
void ShutdownDatabase();
// Returns a pointer to the DB (used by SyncableServices). May return NULL if
// the database is unavailable. Must be called on DB sequence.
WebDatabase* GetDatabase();
// Test-only API to verify if the database is stored in-memory only, as
// opposed to on-disk storage.
bool UsesInMemoryDatabaseForTesting() const;
protected:
friend class base::RefCountedDeleteOnSequence<WebDataServiceBase>;
friend class base::DeleteHelper<WebDataServiceBase>;
virtual ~WebDataServiceBase();
// Our database service.
scoped_refptr<WebDatabaseService> wdbs_;
};
#endif // COMPONENTS_WEBDATA_COMMON_WEB_DATA_SERVICE_BASE_H_
|