Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/geolocation/MLSFallback.cpp
Line
Count
Source (jump to first uncovered line)
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
NS_IMPL_ISUPPORTS(MLSFallback, nsITimerCallback, nsINamed)
13
14
MLSFallback::MLSFallback(uint32_t delay)
15
: mDelayMs(delay)
16
0
{
17
0
}
18
19
MLSFallback::~MLSFallback()
20
0
{
21
0
}
22
23
nsresult
24
MLSFallback::Startup(nsIGeolocationUpdate* aWatcher)
25
0
{
26
0
  if (mHandoffTimer || mMLSFallbackProvider) {
27
0
    return NS_OK;
28
0
  }
29
0
30
0
  mUpdateWatcher = aWatcher;
31
0
32
0
  // No need to schedule a timer callback if there is no startup delay.
33
0
  if (mDelayMs == 0) {
34
0
    return CreateMLSFallbackProvider();
35
0
  }
36
0
37
0
  return NS_NewTimerWithCallback(getter_AddRefs(mHandoffTimer),
38
0
                                 this, mDelayMs, nsITimer::TYPE_ONE_SHOT);
39
0
}
40
41
nsresult
42
MLSFallback::Shutdown()
43
0
{
44
0
  mUpdateWatcher = nullptr;
45
0
46
0
  if (mHandoffTimer) {
47
0
    mHandoffTimer->Cancel();
48
0
    mHandoffTimer = nullptr;
49
0
  }
50
0
51
0
  nsresult rv = NS_OK;
52
0
  if (mMLSFallbackProvider) {
53
0
    rv = mMLSFallbackProvider->Shutdown();
54
0
    mMLSFallbackProvider = nullptr;
55
0
  }
56
0
  return rv;
57
0
}
58
59
NS_IMETHODIMP
60
MLSFallback::Notify(nsITimer* aTimer)
61
0
{
62
0
  return CreateMLSFallbackProvider();
63
0
}
64
65
NS_IMETHODIMP
66
MLSFallback::GetName(nsACString& aName)
67
0
{
68
0
  aName.AssignLiteral("MLSFallback");
69
0
  return NS_OK;
70
0
}
71
72
nsresult
73
MLSFallback::CreateMLSFallbackProvider()
74
0
{
75
0
  if (mMLSFallbackProvider || !mUpdateWatcher) {
76
0
    return NS_OK;
77
0
  }
78
0
79
0
  nsresult rv;
80
0
  mMLSFallbackProvider = do_CreateInstance("@mozilla.org/geolocation/mls-provider;1", &rv);
81
0
  NS_ENSURE_SUCCESS(rv, rv);
82
0
83
0
  if (mMLSFallbackProvider) {
84
0
    rv = mMLSFallbackProvider->Startup();
85
0
    if (NS_SUCCEEDED(rv)) {
86
0
      mMLSFallbackProvider->Watch(mUpdateWatcher);
87
0
    }
88
0
  }
89
0
  mUpdateWatcher = nullptr;
90
0
  return rv;
91
0
}
92