summaryrefslogtreecommitdiff
path: root/chromium/chrome/renderer/chrome_render_thread_observer.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/renderer/chrome_render_thread_observer.h')
-rw-r--r--chromium/chrome/renderer/chrome_render_thread_observer.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/chromium/chrome/renderer/chrome_render_thread_observer.h b/chromium/chrome/renderer/chrome_render_thread_observer.h
new file mode 100644
index 00000000000..1714c08cacf
--- /dev/null
+++ b/chromium/chrome/renderer/chrome_render_thread_observer.h
@@ -0,0 +1,144 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_CHROME_RENDER_THREAD_OBSERVER_H_
+#define CHROME_RENDERER_CHROME_RENDER_THREAD_OBSERVER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "chrome/common/renderer_configuration.mojom.h"
+#include "components/content_settings/core/common/content_settings.h"
+#include "content/public/renderer/render_thread_observer.h"
+#include "mojo/public/cpp/bindings/associated_receiver_set.h"
+#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+
+#if defined(OS_CHROMEOS)
+#include "chrome/renderer/chromeos_delayed_callback_group.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#endif // defined(OS_CHROMEOS)
+
+namespace content {
+class ResourceDispatcherDelegate;
+}
+
+namespace visitedlink {
+class VisitedLinkSlave;
+}
+
+// This class filters the incoming control messages (i.e. ones not destined for
+// a RenderView) for Chrome specific messages that the content layer doesn't
+// happen. If a few messages are related, they should probably have their own
+// observer.
+class ChromeRenderThreadObserver : public content::RenderThreadObserver,
+ public chrome::mojom::RendererConfiguration {
+ public:
+#if defined(OS_CHROMEOS)
+ // A helper class to handle Mojo calls that need to be dispatched to the IO
+ // thread instead of the main thread as is the norm.
+ // This class is thread-safe.
+ class ChromeOSListener : public chrome::mojom::ChromeOSListener,
+ public base::RefCountedThreadSafe<ChromeOSListener> {
+ public:
+ static scoped_refptr<ChromeOSListener> Create(
+ mojo::PendingReceiver<chrome::mojom::ChromeOSListener>
+ chromeos_listener_receiver);
+
+ // Is the merge session still running?
+ bool IsMergeSessionRunning() const;
+
+ // Run |callback| on the calling sequence when the merge session has
+ // finished (or timed out).
+ void RunWhenMergeSessionFinished(DelayedCallbackGroup::Callback callback);
+
+ protected:
+ // chrome::mojom::ChromeOSListener:
+ void MergeSessionComplete() override;
+
+ private:
+ friend class base::RefCountedThreadSafe<ChromeOSListener>;
+
+ ChromeOSListener();
+ ~ChromeOSListener() override;
+
+ void BindOnIOThread(mojo::PendingReceiver<chrome::mojom::ChromeOSListener>
+ chromeos_listener_receiver);
+
+ scoped_refptr<DelayedCallbackGroup> session_merged_callbacks_;
+ bool merge_session_running_ GUARDED_BY(lock_);
+ mutable base::Lock lock_;
+ mojo::Receiver<chrome::mojom::ChromeOSListener> receiver_{this};
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeOSListener);
+ };
+#endif // defined(OS_CHROMEOS)
+
+ ChromeRenderThreadObserver();
+ ~ChromeRenderThreadObserver() override;
+
+ static bool is_incognito_process() { return is_incognito_process_; }
+
+ // Return the dynamic parameters - those that may change while the
+ // render process is running.
+ static const chrome::mojom::DynamicParams& GetDynamicParams();
+
+ // Returns a pointer to the content setting rules owned by
+ // |ChromeRenderThreadObserver|.
+ const RendererContentSettingRules* content_setting_rules() const;
+
+ visitedlink::VisitedLinkSlave* visited_link_slave() {
+ return visited_link_slave_.get();
+ }
+
+#if defined(OS_CHROMEOS)
+ scoped_refptr<ChromeOSListener> chromeos_listener() const {
+ return chromeos_listener_;
+ }
+#endif // defined(OS_CHROMEOS)
+
+ private:
+ // content::RenderThreadObserver:
+ void RegisterMojoInterfaces(
+ blink::AssociatedInterfaceRegistry* associated_interfaces) override;
+ void UnregisterMojoInterfaces(
+ blink::AssociatedInterfaceRegistry* associated_interfaces) override;
+
+ // chrome::mojom::RendererConfiguration:
+ void SetInitialConfiguration(
+ bool is_incognito_process,
+ mojo::PendingReceiver<chrome::mojom::ChromeOSListener>
+ chromeos_listener_receiver) override;
+ void SetConfiguration(chrome::mojom::DynamicParamsPtr params) override;
+ void SetContentSettingRules(
+ const RendererContentSettingRules& rules) override;
+ void SetFieldTrialGroup(const std::string& trial_name,
+ const std::string& group_name) override;
+
+ void OnRendererConfigurationAssociatedRequest(
+ mojo::PendingAssociatedReceiver<chrome::mojom::RendererConfiguration>
+ receiver);
+
+ static bool is_incognito_process_;
+ std::unique_ptr<content::ResourceDispatcherDelegate> resource_delegate_;
+ RendererContentSettingRules content_setting_rules_;
+
+ std::unique_ptr<visitedlink::VisitedLinkSlave> visited_link_slave_;
+
+ mojo::AssociatedReceiverSet<chrome::mojom::RendererConfiguration>
+ renderer_configuration_receivers_;
+
+#if defined(OS_CHROMEOS)
+ // Only set if the Chrome OS merge session was running when the renderer
+ // was started.
+ scoped_refptr<ChromeOSListener> chromeos_listener_;
+#endif // defined(OS_CHROMEOS)
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeRenderThreadObserver);
+};
+
+#endif // CHROME_RENDERER_CHROME_RENDER_THREAD_OBSERVER_H_