widget/nsDatePickerProxy.cpp
author Rob Wu <rob@robwu.nl>
Sat, 24 Sep 2016 11:16:32 +0200
changeset 320058 a41f871e2d1b37754bbd1001c36c075511b49342
parent 302219 14ac8b409bcd40985ef2abe2ee63ad3b08ab7c69
permissions -rw-r--r--
Bug 1299411 - Decouple Port implementation from API r=aswan Decoupled the API from the implementation. From now on it is possible to create Port instances without generating an API. This allows us to internally use Ports to pass around messages with minimal overhead (in the form of unnecessary clones of messages). This will be used by native messaging. This commit has no behavioral change, it is mostly moving around some code and storing the internal message listener in a set. MozReview-Commit-ID: 4h0LNJvTH9R

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *
 * 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 "nsDatePickerProxy.h"

#include "mozilla/dom/TabChild.h"

using namespace mozilla::dom;

NS_IMPL_ISUPPORTS(nsDatePickerProxy, nsIDatePicker)

/* void init (in nsIDOMWindow parent, in AString title, in short mode); */
NS_IMETHODIMP
nsDatePickerProxy::Init(mozIDOMWindowProxy* aParent, const nsAString& aTitle,
                         const nsAString& aInitialDate)
{
  TabChild* tabChild = TabChild::GetFrom(aParent);
  if (!tabChild) {
    return NS_ERROR_FAILURE;
  }

  tabChild->SendPDatePickerConstructor(this,
                                       nsString(aTitle),
                                       nsString(aInitialDate));
  NS_ADDREF_THIS(); //Released in DeallocPDatePickerChild
  return NS_OK;
}

/* void open (in nsIDatePickerShownCallback aDatePickerShownCallback); */
NS_IMETHODIMP
nsDatePickerProxy::Open(nsIDatePickerShownCallback* aDatePickerShownCallback)
{
  NS_ENSURE_STATE(!mCallback);
  mCallback = aDatePickerShownCallback;

  SendOpen();
  return NS_OK;
}

bool
nsDatePickerProxy::RecvCancel()
{
  if (mCallback) {
    mCallback->Cancel();
    mCallback = nullptr;
  }
  return true;
}

bool
nsDatePickerProxy::Recv__delete__(const nsString& aDate)
{
  if (mCallback) {
    mCallback->Done(aDate);
    mCallback = nullptr;
  }
  return true;
}