File: blob_transport_strategy.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (60 lines) | stat: -rw-r--r-- 2,342 bytes parent folder | download | duplicates (11)
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
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef STORAGE_BROWSER_BLOB_BLOB_TRANSPORT_STRATEGY_H_
#define STORAGE_BROWSER_BLOB_BLOB_TRANSPORT_STRATEGY_H_

#include "base/component_export.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "storage/browser/blob/blob_memory_controller.h"
#include "third_party/blink/public/mojom/blob/blob_registry.mojom.h"

namespace storage {

class BlobDataBuilder;

// This class is responsible for transporting bytes for an under-construction
// blob, using a specified transport strategy. This is used by BlobRegistryImpl
// for the actual transportation of bytes.
class COMPONENT_EXPORT(STORAGE_BROWSER) BlobTransportStrategy {
 public:
  using ResultCallback = base::OnceCallback<void(BlobStatus)>;

  // Creates a BlobTransportStrategy instance for the specified memory strategy.
  // The BlobDataBuilder and BlobStorageLimits must outlive the returned
  // BlobTransportStrategy.
  static std::unique_ptr<BlobTransportStrategy> Create(
      BlobMemoryController::Strategy strategy,
      BlobDataBuilder* builder,
      ResultCallback result_callback,
      const BlobStorageLimits& limits);
  virtual ~BlobTransportStrategy();

  // Called once for each DataElementBytes in a blob. The |bytes| passed in must
  // outlive the BlobTransportStrategy instance. If |data| is bound, this call
  // may use it to acquire the bytes asynchronously rather than reading from
  // |bytes|.
  virtual void AddBytesElement(
      blink::mojom::DataElementBytes* bytes,
      const mojo::Remote<blink::mojom::BytesProvider>& data) = 0;

  // Called when quota has been allocated and transportation should begin.
  // Implementations will call the |result_callback_| when transportation has
  // completed, or failed.
  virtual void BeginTransport(
      std::vector<BlobMemoryController::FileCreationInfo> file_infos) = 0;

 protected:
  BlobTransportStrategy(BlobDataBuilder* builder,
                        ResultCallback result_callback);

  raw_ptr<BlobDataBuilder, AcrossTasksDanglingUntriaged> builder_;
  ResultCallback result_callback_;
};

}  // namespace storage

#endif  // STORAGE_BROWSER_BLOB_BLOB_TRANSPORT_STRATEGY_H_