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_