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
87
88
89
90
91
92
content / browser / indexed_db / indexed_db_internals_ui.h [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INTERNALS_UI_H_
#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INTERNALS_UI_H_
#include <stddef.h>
#include <memory>
#include <vector>
#include "base/files/file_path.h"
#include "components/download/public/common/download_interrupt_reasons.h"
#include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h"
#include "components/services/storage/public/cpp/buckets/bucket_id.h"
#include "content/browser/indexed_db/indexed_db_internals.mojom.h"
#include "content/public/browser/web_ui_controller.h"
#include "content/public/browser/webui_config.h"
#include "content/public/common/url_constants.h"
namespace download {
class DownloadItem;
}
namespace content::indexed_db {
class IndexedDBInternalsUI;
class IndexedDBInternalsUIConfig
: public DefaultWebUIConfig<IndexedDBInternalsUI> {
public:
IndexedDBInternalsUIConfig()
: DefaultWebUIConfig(kChromeUIScheme, kChromeUIIndexedDBInternalsHost) {}
};
// The implementation for the chrome://indexeddb-internals page.
class IndexedDBInternalsUI : public WebUIController,
public storage::mojom::IdbInternalsHandler {
public:
explicit IndexedDBInternalsUI(WebUI* web_ui);
IndexedDBInternalsUI(const IndexedDBInternalsUI&) = delete;
IndexedDBInternalsUI& operator=(const IndexedDBInternalsUI&) = delete;
~IndexedDBInternalsUI() override;
void BindInterface(
mojo::PendingReceiver<storage::mojom::IdbInternalsHandler> receiver);
// WebUIController:
void WebUIRenderFrameCreated(RenderFrameHost* rfh) override;
// storage::mojom::IdbInternalsHandler:
void GetAllBucketsAcrossAllStorageKeys(
GetAllBucketsAcrossAllStorageKeysCallback callback) override;
void DownloadBucketData(storage::BucketId bucket_id,
DownloadBucketDataCallback callback) override;
void ForceClose(storage::BucketId bucket_id,
ForceCloseCallback callback) override;
void StartMetadataRecording(storage::BucketId bucket_id,
StartMetadataRecordingCallback callback) override;
void StopMetadataRecording(storage::BucketId bucket_id,
StopMetadataRecordingCallback callback) override;
void InspectClient(const storage::BucketClientInfo& client_info,
InspectClientCallback callback) override;
private:
void OnDownloadDataReady(DownloadBucketDataCallback callback,
bool success,
const base::FilePath& temp_path,
const base::FilePath& zip_path);
void OnDownloadStarted(const base::FilePath& temp_path,
DownloadBucketDataCallback callback,
download::DownloadItem* item,
download::DownloadInterruptReason interrupt_reason);
storage::mojom::IndexedDBControl* GetBucketControl(
storage::BucketId bucket_id);
std::map<storage::BucketId, base::FilePath> bucket_to_partition_path_map_;
bool devtools_agent_hosts_created_ = false;
std::unique_ptr<mojo::Receiver<storage::mojom::IdbInternalsHandler>>
receiver_;
base::WeakPtrFactory<IndexedDBInternalsUI> weak_factory_{this};
WEB_UI_CONTROLLER_TYPE_DECL();
};
} // namespace content::indexed_db
#endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_INTERNALS_UI_H_