File: loadable_plugin_placeholder.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (92 lines) | stat: -rw-r--r-- 2,810 bytes parent folder | download | duplicates (5)
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
// Copyright 2015 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_PLUGINS_RENDERER_LOADABLE_PLUGIN_PLACEHOLDER_H_
#define COMPONENTS_PLUGINS_RENDERER_LOADABLE_PLUGIN_PLACEHOLDER_H_

#include <memory>

#include "base/memory/weak_ptr.h"
#include "base/timer/timer.h"
#include "components/plugins/renderer/plugin_placeholder.h"
#include "content/public/common/webplugininfo.h"
#include "content/public/renderer/render_thread.h"

namespace content {
class RenderFrame;
}

namespace plugins {

// Placeholders can be used if a plugin is missing or not available
// (blocked or disabled).
class LoadablePluginPlaceholder : public PluginPlaceholderBase {
 public:
  LoadablePluginPlaceholder(const LoadablePluginPlaceholder&) = delete;
  LoadablePluginPlaceholder& operator=(const LoadablePluginPlaceholder&) =
      delete;

  void set_blocked_for_no_state_prefetching(
      bool blocked_for_no_state_prefetching) {
    is_blocked_for_no_state_prefetching_ = blocked_for_no_state_prefetching;
  }

  void AllowLoading() { allow_loading_ = true; }

  // Load the blocked plugin if the identifier matches (or is empty).
  void MaybeLoadBlockedPlugin(const std::string& identifier);

 protected:
  LoadablePluginPlaceholder(content::RenderFrame* render_frame,
                            const blink::WebPluginParams& params);
  ~LoadablePluginPlaceholder() override;

  void OnSetIsNoStatePrefetching(bool is_no_state_prefetching);

  void SetPluginInfo(const content::WebPluginInfo& plugin_info);
  const content::WebPluginInfo& GetPluginInfo() const;
  void SetIdentifier(const std::string& identifier);
  bool LoadingAllowed() const { return allow_loading_; }

  // Replace this placeholder with a different plugin (which could be
  // a placeholder again).
  void ReplacePlugin(blink::WebPlugin* new_plugin);

  // Load the blocked plugin.
  void LoadPlugin();

  // Javascript callbacks:
  void LoadCallback();
  void DidFinishLoadingCallback();

 private:
  // WebViewPlugin::Delegate methods:
  bool IsErrorPlaceholder() override;

  void UpdateMessage();

  bool LoadingBlocked() const;

  // Plugin creation is embedder-specific.
  virtual blink::WebPlugin* CreatePlugin() = 0;

  content::WebPluginInfo plugin_info_;

  std::u16string message_;

  // True if the plugin was blocked because the page was being prefetched.
  // Plugin may be automatically be loaded when the page is displayed.
  bool is_blocked_for_no_state_prefetching_ = false;

  bool allow_loading_ = false;

  bool finished_loading_ = false;
  std::string identifier_;

  base::WeakPtrFactory<LoadablePluginPlaceholder> weak_factory_{this};
};

}  // namespace plugins

#endif  // COMPONENTS_PLUGINS_RENDERER_LOADABLE_PLUGIN_PLACEHOLDER_H_