Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(497)

Side by Side Diff: third_party/WebKit/Source/modules/bluetooth/BluetoothGATTRemoteServer.h

Issue 1611773002: bluetooth: Disconnect if the page becomes hidden or is closed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@my-origin
Patch Set: Address jyasskin's comments #2 Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BluetoothGATTRemoteServer_h 5 #ifndef BluetoothGATTRemoteServer_h
6 #define BluetoothGATTRemoteServer_h 6 #define BluetoothGATTRemoteServer_h
7 7
8 #include "bindings/core/v8/ScriptWrappable.h" 8 #include "bindings/core/v8/ScriptWrappable.h"
9 #include "bindings/modules/v8/UnionTypesModules.h" 9 #include "bindings/modules/v8/UnionTypesModules.h"
10 #include "core/dom/ActiveDOMObject.h"
11 #include "core/page/PageLifecycleObserver.h"
10 #include "platform/heap/Heap.h" 12 #include "platform/heap/Heap.h"
11 #include "public/platform/modules/bluetooth/WebBluetoothGATTRemoteServer.h" 13 #include "public/platform/modules/bluetooth/WebBluetoothGATTRemoteServer.h"
12 #include "wtf/OwnPtr.h" 14 #include "wtf/OwnPtr.h"
13 #include "wtf/PassOwnPtr.h" 15 #include "wtf/PassOwnPtr.h"
14 #include "wtf/text/WTFString.h" 16 #include "wtf/text/WTFString.h"
15 17
16 namespace blink { 18 namespace blink {
17 19
18 class ScriptPromise; 20 class ScriptPromise;
19 class ScriptPromiseResolver; 21 class ScriptPromiseResolver;
20 class ScriptState; 22 class ScriptState;
21 23
22 // BluetoothGATTRemoteServer provides a way to interact with a connected bluetoo th peripheral. 24 // BluetoothGATTRemoteServer provides a way to interact with a connected bluetoo th peripheral.
23 // 25 //
24 // Callbacks providing WebBluetoothGATTRemoteServer objects are handled by 26 // Callbacks providing WebBluetoothGATTRemoteServer objects are handled by
25 // CallbackPromiseAdapter templatized with this class. See this class's 27 // CallbackPromiseAdapter templatized with this class. See this class's
26 // "Interface required by CallbackPromiseAdapter" section and the 28 // "Interface required by CallbackPromiseAdapter" section and the
27 // CallbackPromiseAdapter class comments. 29 // CallbackPromiseAdapter class comments.
28 class BluetoothGATTRemoteServer final 30 class BluetoothGATTRemoteServer final
29 : public GarbageCollectedFinalized<BluetoothGATTRemoteServer> 31 : public GarbageCollectedFinalized<BluetoothGATTRemoteServer>
32 , public ActiveDOMObject
33 , public PageLifecycleObserver
30 , public ScriptWrappable { 34 , public ScriptWrappable {
35 USING_PRE_FINALIZER(BluetoothGATTRemoteServer, dispose);
31 DEFINE_WRAPPERTYPEINFO(); 36 DEFINE_WRAPPERTYPEINFO();
37 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(BluetoothGATTRemoteServer);
32 public: 38 public:
33 BluetoothGATTRemoteServer(PassOwnPtr<WebBluetoothGATTRemoteServer>); 39 BluetoothGATTRemoteServer(ExecutionContext*, PassOwnPtr<WebBluetoothGATTRemo teServer>);
34 40
35 // Interface required by CallbackPromiseAdapter: 41 // Interface required by CallbackPromiseAdapter:
36 using WebType = OwnPtr<WebBluetoothGATTRemoteServer>; 42 using WebType = OwnPtr<WebBluetoothGATTRemoteServer>;
37 static BluetoothGATTRemoteServer* take(ScriptPromiseResolver*, PassOwnPtr<We bBluetoothGATTRemoteServer>); 43 static BluetoothGATTRemoteServer* take(ScriptPromiseResolver*, PassOwnPtr<We bBluetoothGATTRemoteServer>);
38 44
45 // We should disconnect from the device in all of the following cases:
46 // 1. When the object gets GarbageCollected e.g. it went out of scope.
47 // dispose() is called in this case.
48 // 2. When the parent document gets detached e.g. reloading a page.
49 // stop() is called in this case.
50 // 3. For now (https://crbug.com/579746), when the tab is no longer in the
51 // foreground e.g. change tabs.
52 // pageVisibilityChanged() is called in this case.
53 // TODO(ortuno): Users should be able to turn on notifications listen for
54 // events on navigator.bluetooth and still remain connected even if the
55 // BluetoothGATTRemoteServer object is garbage collected.
56 // TODO(ortuno): Allow connections when the tab is in the background.
57 // This is a short term solution instead of implementing a tab indicator
58 // for bluetooth connections.
59
60 // USING_PRE_FINALIZER interface.
61 // Called before the object gets garbage collected.
62 void dispose();
63
64 // ActiveDOMObject interface.
65 void stop() override;
66
67 // PageLifecycleObserver interface.
68 void pageVisibilityChanged() override;
69
70 void disconnectIfConnected();
71
39 // Interface required by Garbage Collectoin: 72 // Interface required by Garbage Collectoin:
40 DEFINE_INLINE_TRACE() { } 73 DECLARE_VIRTUAL_TRACE();
41 74
42 // IDL exposed interface: 75 // IDL exposed interface:
43 bool connected() { return m_webGATT->connected; } 76 bool connected() { return m_webGATT->connected; }
44 void disconnect(ScriptState*); 77 void disconnect(ScriptState*);
45 ScriptPromise getPrimaryService(ScriptState*, const StringOrUnsignedLong& se rvice, ExceptionState&); 78 ScriptPromise getPrimaryService(ScriptState*, const StringOrUnsignedLong& se rvice, ExceptionState&);
46 79
47 private: 80 private:
48 OwnPtr<WebBluetoothGATTRemoteServer> m_webGATT; 81 OwnPtr<WebBluetoothGATTRemoteServer> m_webGATT;
49 }; 82 };
50 83
51 } // namespace blink 84 } // namespace blink
52 85
53 #endif // BluetoothDevice_h 86 #endif // BluetoothDevice_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698