widget/android/GeckoSystemStateListener.h
author longsonr <longsonr@gmail.com>
Sat, 16 Mar 2019 17:00:23 +0000
changeset 464696 d36eebc8899848bd3285c7b02466b3f9eb0a0f9a
parent 452446 f0a91d36587266d7454a450c6044d573664fbed5
child 466751 7b71c9da0214e43368ab5cfb95344ca5ae13d670
permissions -rw-r--r--
Bug 1532156 - correct marker-start for closed paths so it is the average of the start and end angles i.e. the same as marker-end r=dholbert

/* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
 * 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/. */

#ifndef GeckoSystemStateListener_h
#define GeckoSystemStateListener_h

#include "GeneratedJNINatives.h"
#include "mozilla/dom/Document.h"
#include "nsIPresShell.h"
#include "nsIWindowMediator.h"
#include "nsPIDOMWindow.h"
#include "mozilla/Assertions.h"

namespace mozilla {

class GeckoSystemStateListener final
    : public java::GeckoSystemStateListener::Natives<GeckoSystemStateListener> {
  GeckoSystemStateListener() = delete;

 public:
  static void OnDeviceChanged() {
    MOZ_ASSERT(NS_IsMainThread());

    // Iterate all toplevel windows
    nsCOMPtr<nsIWindowMediator> windowMediator =
        do_GetService(NS_WINDOWMEDIATOR_CONTRACTID);
    NS_ENSURE_TRUE_VOID(windowMediator);

    nsCOMPtr<nsISimpleEnumerator> windowEnumerator;
    windowMediator->GetEnumerator(nullptr, getter_AddRefs(windowEnumerator));
    NS_ENSURE_TRUE_VOID(windowEnumerator);

    bool more;
    while (NS_SUCCEEDED(windowEnumerator->HasMoreElements(&more)) && more) {
      nsCOMPtr<nsISupports> elements;
      if (NS_FAILED(windowEnumerator->GetNext(getter_AddRefs(elements)))) {
        break;
      }

      if (nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryInterface(elements)) {
        if (window->Closed()) {
          continue;
        }
        if (dom::Document* doc = window->GetExtantDoc()) {
          if (nsIPresShell* presShell = doc->GetShell()) {
            presShell->ThemeChanged();
          }
        }
      }
    }
  }
};

}  // namespace mozilla

#endif  // GeckoSystemStateListener_h