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

Side by Side Diff: third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp

Issue 2108003002: Merge //content/child/permissions into Blink's permissions module. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 4 years, 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "modules/permissions/PermissionStatus.h" 5 #include "modules/permissions/PermissionStatus.h"
6 6
7 #include "bindings/core/v8/ScriptPromiseResolver.h" 7 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/events/Event.h" 9 #include "core/events/Event.h"
10 #include "modules/EventTargetModulesNames.h" 10 #include "modules/EventTargetModulesNames.h"
11 #include "modules/permissions/PermissionController.h"
12 #include "modules/permissions/Permissions.h" 11 #include "modules/permissions/Permissions.h"
13 #include "public/platform/Platform.h" 12 #include "public/platform/Platform.h"
14 #include "public/platform/modules/permissions/WebPermissionClient.h" 13 #include "wtf/Functional.h"
15 14
16 namespace blink { 15 namespace blink {
17 16
18 // static 17 // static
19 PermissionStatus* PermissionStatus::take(ScriptPromiseResolver* resolver, WebPer missionStatus status, WebPermissionType type) 18 PermissionStatus* PermissionStatus::take(ScriptPromiseResolver* resolver, MojoPe rmissionStatus status, MojoPermissionName name)
20 { 19 {
21 return PermissionStatus::createAndListen(resolver->getExecutionContext(), st atus, type); 20 return PermissionStatus::createAndListen(resolver->getExecutionContext(), st atus, name);
22 } 21 }
23 22
24 PermissionStatus* PermissionStatus::createAndListen(ExecutionContext* executionC ontext, WebPermissionStatus status, WebPermissionType type) 23 PermissionStatus* PermissionStatus::createAndListen(ExecutionContext* executionC ontext, MojoPermissionStatus status, MojoPermissionName name)
25 { 24 {
26 PermissionStatus* permissionStatus = new PermissionStatus(executionContext, status, type); 25 PermissionStatus* permissionStatus = new PermissionStatus(executionContext, status, name);
27 permissionStatus->suspendIfNeeded(); 26 permissionStatus->suspendIfNeeded();
28 permissionStatus->startListening(); 27 permissionStatus->startListening();
29 return permissionStatus; 28 return permissionStatus;
30 } 29 }
31 30
32 PermissionStatus::PermissionStatus(ExecutionContext* executionContext, WebPermis sionStatus status, WebPermissionType type) 31 PermissionStatus::PermissionStatus(ExecutionContext* executionContext, MojoPermi ssionStatus status, MojoPermissionName name)
33 : ActiveScriptWrappable(this) 32 : ActiveScriptWrappable(this)
34 , ActiveDOMObject(executionContext) 33 , ActiveDOMObject(executionContext)
35 , m_status(status) 34 , m_status(status)
36 , m_type(type) 35 , m_name(name)
37 , m_listening(false)
38 { 36 {
39 } 37 }
40 38
41 PermissionStatus::~PermissionStatus() 39 PermissionStatus::~PermissionStatus()
42 { 40 {
43 stopListening(); 41 stopListening();
44 } 42 }
45 43
46 const AtomicString& PermissionStatus::interfaceName() const 44 const AtomicString& PermissionStatus::interfaceName() const
47 { 45 {
48 return EventTargetNames::PermissionStatus; 46 return EventTargetNames::PermissionStatus;
49 } 47 }
50 48
51 ExecutionContext* PermissionStatus::getExecutionContext() const 49 ExecutionContext* PermissionStatus::getExecutionContext() const
52 { 50 {
53 return ActiveDOMObject::getExecutionContext(); 51 return ActiveDOMObject::getExecutionContext();
54 } 52 }
55 53
56 void PermissionStatus::permissionChanged(WebPermissionType type, WebPermissionSt atus status) 54 void PermissionStatus::permissionChanged(MojoPermissionStatus status)
57 { 55 {
58 ASSERT(m_type == type);
59 if (m_status == status) 56 if (m_status == status)
60 return; 57 return;
61 58
62 m_status = status; 59 m_status = status;
63 dispatchEvent(Event::create(EventTypeNames::change)); 60 dispatchEvent(Event::create(EventTypeNames::change));
61 m_service->GetNextPermissionChange(m_name, getExecutionContext()->getSecurit yOrigin()->toString(), m_status, convertToBaseCallback(WTF::bind(&PermissionStat us::permissionChanged, wrapWeakPersistent(this))));
64 } 62 }
65 63
66 bool PermissionStatus::hasPendingActivity() const 64 bool PermissionStatus::hasPendingActivity() const
67 { 65 {
68 return m_listening; 66 return m_service;
69 } 67 }
70 68
71 void PermissionStatus::resume() 69 void PermissionStatus::resume()
72 { 70 {
73 startListening(); 71 startListening();
74 } 72 }
75 73
76 void PermissionStatus::suspend() 74 void PermissionStatus::suspend()
77 { 75 {
78 stopListening(); 76 stopListening();
79 } 77 }
80 78
81 void PermissionStatus::stop() 79 void PermissionStatus::stop()
82 { 80 {
83 stopListening(); 81 stopListening();
84 } 82 }
85 83
86 void PermissionStatus::startListening() 84 void PermissionStatus::startListening()
87 { 85 {
88 ASSERT(!m_listening); 86 DCHECK(!m_service);
89 87 Permissions::connectToService(getExecutionContext(), mojo::GetProxy(&m_servi ce));
90 WebPermissionClient* client = Permissions::getClient(getExecutionContext()); 88 m_service->GetNextPermissionChange(m_name, getExecutionContext()->getSecurit yOrigin()->toString(), m_status, convertToBaseCallback(WTF::bind(&PermissionStat us::permissionChanged, wrapWeakPersistent(this))));
91 if (!client)
92 return;
93 m_listening = true;
94 client->startListening(m_type, KURL(KURL(), getExecutionContext()->getSecuri tyOrigin()->toString()), this);
95 } 89 }
96 90
97 void PermissionStatus::stopListening() 91 void PermissionStatus::stopListening()
98 { 92 {
99 if (!m_listening) 93 m_service.reset();
100 return;
101
102 ASSERT(getExecutionContext());
103
104 m_listening = false;
105 WebPermissionClient* client = Permissions::getClient(getExecutionContext());
106 if (!client)
107 return;
108 client->stopListening(this);
109 } 94 }
110 95
111 String PermissionStatus::state() const 96 String PermissionStatus::state() const
112 { 97 {
113 switch (m_status) { 98 switch (m_status) {
114 case WebPermissionStatusGranted: 99 case MojoPermissionStatus::GRANTED:
115 return "granted"; 100 return "granted";
116 case WebPermissionStatusDenied: 101 case MojoPermissionStatus::DENIED:
117 return "denied"; 102 return "denied";
118 case WebPermissionStatusPrompt: 103 case MojoPermissionStatus::ASK:
119 return "prompt"; 104 return "prompt";
120 } 105 }
121 106
122 ASSERT_NOT_REACHED(); 107 ASSERT_NOT_REACHED();
123 return "denied"; 108 return "denied";
124 } 109 }
125 110
126 DEFINE_TRACE(PermissionStatus) 111 DEFINE_TRACE(PermissionStatus)
127 { 112 {
128 EventTargetWithInlineData::trace(visitor); 113 EventTargetWithInlineData::trace(visitor);
129 ActiveDOMObject::trace(visitor); 114 ActiveDOMObject::trace(visitor);
130 } 115 }
131 116
132 } // namespace blink 117 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698