dom/indexedDB/IDBEvents.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/indexedDB/IDBEvents.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,98 @@
     1.4 +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* vim: set ts=2 et sw=2 tw=80: */
     1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.9 +
    1.10 +#include "IDBEvents.h"
    1.11 +
    1.12 +#include "nsJSON.h"
    1.13 +#include "nsThreadUtils.h"
    1.14 +
    1.15 +#include "IDBRequest.h"
    1.16 +#include "IDBTransaction.h"
    1.17 +
    1.18 +USING_INDEXEDDB_NAMESPACE
    1.19 +using namespace mozilla::dom;
    1.20 +
    1.21 +namespace {
    1.22 +
    1.23 +class EventFiringRunnable : public nsRunnable
    1.24 +{
    1.25 +public:
    1.26 +  EventFiringRunnable(EventTarget* aTarget,
    1.27 +                      nsIDOMEvent* aEvent)
    1.28 +  : mTarget(aTarget), mEvent(aEvent)
    1.29 +  { }
    1.30 +
    1.31 +  NS_IMETHOD Run() {
    1.32 +    bool dummy;
    1.33 +    return mTarget->DispatchEvent(mEvent, &dummy);
    1.34 +  }
    1.35 +
    1.36 +private:
    1.37 +  nsCOMPtr<EventTarget> mTarget;
    1.38 +  nsCOMPtr<nsIDOMEvent> mEvent;
    1.39 +};
    1.40 +
    1.41 +} // anonymous namespace
    1.42 +
    1.43 +already_AddRefed<nsIDOMEvent>
    1.44 +mozilla::dom::indexedDB::CreateGenericEvent(mozilla::dom::EventTarget* aOwner,
    1.45 +                                            const nsAString& aType,
    1.46 +                                            Bubbles aBubbles,
    1.47 +                                            Cancelable aCancelable)
    1.48 +{
    1.49 +  nsCOMPtr<nsIDOMEvent> event;
    1.50 +  NS_NewDOMEvent(getter_AddRefs(event), aOwner, nullptr, nullptr);
    1.51 +  nsresult rv = event->InitEvent(aType,
    1.52 +                                 aBubbles == eDoesBubble ? true : false,
    1.53 +                                 aCancelable == eCancelable ? true : false);
    1.54 +  NS_ENSURE_SUCCESS(rv, nullptr);
    1.55 +
    1.56 +  event->SetTrusted(true);
    1.57 +
    1.58 +  return event.forget();
    1.59 +}
    1.60 +
    1.61 +// static
    1.62 +already_AddRefed<IDBVersionChangeEvent>
    1.63 +IDBVersionChangeEvent::CreateInternal(mozilla::dom::EventTarget* aOwner,
    1.64 +                                      const nsAString& aType,
    1.65 +                                      uint64_t aOldVersion,
    1.66 +                                      uint64_t aNewVersion)
    1.67 +{
    1.68 +  nsRefPtr<IDBVersionChangeEvent> event(new IDBVersionChangeEvent(aOwner));
    1.69 +
    1.70 +  nsresult rv = event->InitEvent(aType, false, false);
    1.71 +  NS_ENSURE_SUCCESS(rv, nullptr);
    1.72 +
    1.73 +  event->SetTrusted(true);
    1.74 +
    1.75 +  event->mOldVersion = aOldVersion;
    1.76 +  event->mNewVersion = aNewVersion;
    1.77 +
    1.78 +  return event.forget();
    1.79 +}
    1.80 +
    1.81 +// static
    1.82 +already_AddRefed<nsIRunnable>
    1.83 +IDBVersionChangeEvent::CreateRunnableInternal(mozilla::dom::EventTarget* aTarget,
    1.84 +                                              const nsAString& aType,
    1.85 +                                              uint64_t aOldVersion,
    1.86 +                                              uint64_t aNewVersion)
    1.87 +{
    1.88 +  nsRefPtr<Event> event =
    1.89 +    CreateInternal(aTarget, aType, aOldVersion, aNewVersion);
    1.90 +  NS_ENSURE_TRUE(event, nullptr);
    1.91 +
    1.92 +  nsCOMPtr<nsIRunnable> runnable(new EventFiringRunnable(aTarget, event));
    1.93 +  return runnable.forget();
    1.94 +}
    1.95 +
    1.96 +NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent, Event)
    1.97 +NS_IMPL_RELEASE_INHERITED(IDBVersionChangeEvent, Event)
    1.98 +
    1.99 +NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
   1.100 +  NS_INTERFACE_MAP_ENTRY(IDBVersionChangeEvent)
   1.101 +NS_INTERFACE_MAP_END_INHERITING(Event)

mercurial