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
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/extensions/ExtensionsChild.h"
#include "mozilla/extensions/ExtensionsParent.h"
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/InProcessChild.h"
#include "mozilla/dom/InProcessParent.h"
#include "mozilla/ipc/Endpoint.h"
#include "nsXULAppAPI.h"
using namespace mozilla::dom;
namespace mozilla {
namespace extensions {
NS_IMPL_ISUPPORTS(ExtensionsChild, nsIObserver)
/* static */
ExtensionsChild& ExtensionsChild::Get() {
static RefPtr<ExtensionsChild> sInstance;
if (MOZ_UNLIKELY(!sInstance)) {
sInstance = new ExtensionsChild();
sInstance->Init();
ClearOnShutdown(&sInstance);
}
return *sInstance;
}
/* static */
already_AddRefed<ExtensionsChild> ExtensionsChild::GetSingleton() {
return do_AddRef(&Get());
}
void ExtensionsChild::Init() {
if (XRE_IsContentProcess()) {
ContentChild::GetSingleton()->SendPExtensionsConstructor(this);
} else {
InProcessChild* ipChild = InProcessChild::Singleton();
InProcessParent* ipParent = InProcessParent::Singleton();
if (!ipChild || !ipParent) {
return;
}
RefPtr parent = new ExtensionsParent();
ManagedEndpoint<PExtensionsParent> endpoint =
ipChild->OpenPExtensionsEndpoint(this);
ipParent->BindPExtensionsEndpoint(std::move(endpoint), parent);
}
}
void ExtensionsChild::ActorDestroy(ActorDestroyReason aWhy) {}
/* nsIObserver */
NS_IMETHODIMP ExtensionsChild::Observe(nsISupports*, const char* aTopic,
const char16_t*) {
// Since this class is created at startup by the Category Manager, it's
// expected to implement nsIObserver; however, we have nothing interesting
// to do here.
MOZ_ASSERT(strcmp(aTopic, "app-startup") == 0);
return NS_OK;
}
} // namespace extensions
} // namespace mozilla
|