Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "MLSFallback.h"
8 : #include "nsGeoPosition.h"
9 : #include "nsIGeolocationProvider.h"
10 : #include "nsServiceManagerUtils.h"
11 :
12 0 : NS_IMPL_ISUPPORTS(MLSFallback, nsITimerCallback)
13 :
14 0 : MLSFallback::MLSFallback(uint32_t delay)
15 0 : : mDelayMs(delay)
16 : {
17 0 : }
18 :
19 0 : MLSFallback::~MLSFallback()
20 : {
21 0 : }
22 :
23 : nsresult
24 0 : MLSFallback::Startup(nsIGeolocationUpdate* aWatcher)
25 : {
26 0 : if (mHandoffTimer || mMLSFallbackProvider) {
27 0 : return NS_OK;
28 : }
29 :
30 0 : mUpdateWatcher = aWatcher;
31 : nsresult rv;
32 0 : mHandoffTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
33 0 : NS_ENSURE_SUCCESS(rv, rv);
34 0 : rv = mHandoffTimer->InitWithCallback(this, mDelayMs, nsITimer::TYPE_ONE_SHOT);
35 0 : return rv;
36 : }
37 :
38 : nsresult
39 0 : MLSFallback::Shutdown()
40 : {
41 0 : mUpdateWatcher = nullptr;
42 :
43 0 : if (mHandoffTimer) {
44 0 : mHandoffTimer->Cancel();
45 0 : mHandoffTimer = nullptr;
46 : }
47 :
48 0 : nsresult rv = NS_OK;
49 0 : if (mMLSFallbackProvider) {
50 0 : rv = mMLSFallbackProvider->Shutdown();
51 0 : mMLSFallbackProvider = nullptr;
52 : }
53 0 : return rv;
54 : }
55 :
56 : NS_IMETHODIMP
57 0 : MLSFallback::Notify(nsITimer* aTimer)
58 : {
59 0 : return CreateMLSFallbackProvider();
60 : }
61 :
62 : nsresult
63 0 : MLSFallback::CreateMLSFallbackProvider()
64 : {
65 0 : if (mMLSFallbackProvider || !mUpdateWatcher) {
66 0 : return NS_OK;
67 : }
68 :
69 : nsresult rv;
70 0 : mMLSFallbackProvider = do_CreateInstance("@mozilla.org/geolocation/mls-provider;1", &rv);
71 0 : NS_ENSURE_SUCCESS(rv, rv);
72 :
73 0 : if (mMLSFallbackProvider) {
74 0 : rv = mMLSFallbackProvider->Startup();
75 0 : if (NS_SUCCEEDED(rv)) {
76 0 : mMLSFallbackProvider->Watch(mUpdateWatcher);
77 : }
78 : }
79 0 : mUpdateWatcher = nullptr;
80 0 : return rv;
81 : }
82 :
|