Changeset 73163 in webkit
- Timestamp:
- Dec 2, 2010 10:59:07 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r73152 r73163 1 2010-12-02 John Knottenbelt <jknotten@chromium.org> 2 3 Reviewed by Steve Block. 4 5 Move requestGeolocationPermissionForFrame to GeolocationClient 6 https://bugs.webkit.org/show_bug.cgi?id=50061 7 8 This change facilitates client-based geolocation implementation by 9 bringing together permission control into the geolocation client 10 interface. 11 12 * page/Chrome.h: 13 * page/ChromeClient.h: 14 * page/Geolocation.cpp: 15 (WebCore::Geolocation::disconnectFrame): 16 (WebCore::Geolocation::requestPermission): 17 * page/GeolocationClient.h: 18 * page/GeolocationController.cpp: 19 (WebCore::GeolocationController::requestPermission): 20 (WebCore::GeolocationController::cancelPermissionRequest): 21 * page/GeolocationController.h: 22 * platform/mock/GeolocationClientMock.cpp: 23 (WebCore::GeolocationClientMock::GeolocationClientMock): 24 (WebCore::GeolocationClientMock::setPermission): 25 (WebCore::GeolocationClientMock::requestPermission): 26 (WebCore::GeolocationClientMock::cancelPermissionRequest): 27 (WebCore::GeolocationClientMock::asyncUpdatePermission): 28 (WebCore::GeolocationClientMock::permissionTimerFired): 29 (WebCore::GeolocationClientMock::reset): 30 (WebCore::GeolocationClientMock::stopUpdating): 31 (WebCore::GeolocationClientMock::asyncUpdateController): 32 (WebCore::GeolocationClientMock::controllerTimerFired): 33 * platform/mock/GeolocationClientMock.h: 34 1 35 2010-12-01 Ilya Tikhonovsky <loislo@chromium.org> 2 36 -
trunk/WebCore/page/Chrome.h
r71541 r73163 140 140 void print(Frame*); 141 141 142 // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373 143 // For client-based geolocation, these two methods have moved to GeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061 142 144 void requestGeolocationPermissionForFrame(Frame*, Geolocation*); 143 145 void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*); -
trunk/WebCore/page/ChromeClient.h
r72954 r73163 207 207 virtual bool paintCustomScrollCorner(GraphicsContext*, const FloatRect&); 208 208 209 // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373 210 // For client-based geolocation, these two methods have moved to GeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061 209 211 // This can be either a synchronous or asynchronous call. The ChromeClient can display UI asking the user for permission 210 212 // to use Geolocation. 211 213 virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) = 0; 212 214 virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) = 0; 213 215 214 216 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) = 0; 215 217 // Asynchronous request to load an icon for specified filenames. -
trunk/WebCore/page/Geolocation.cpp
r72396 r73163 234 234 void Geolocation::disconnectFrame() 235 235 { 236 if (m_frame && m_frame->page() && m_allowGeolocation == InProgress) 236 if (m_frame && m_frame->page() && m_allowGeolocation == InProgress) { 237 #if ENABLE(CLIENT_BASED_GEOLOCATION) 238 m_frame->page()->geolocationController()->cancelPermissionRequest(this); 239 #else 237 240 m_frame->page()->chrome()->cancelGeolocationPermissionRequestForFrame(m_frame, this); 241 #endif 242 } 238 243 cancelAllRequests(); 239 244 stopUpdating(); … … 597 602 m_allowGeolocation = InProgress; 598 603 599 // Ask the chrome: it maintains the geolocation challenge policy itself. 604 // Ask the embedder: it maintains the geolocation challenge policy itself. 605 #if ENABLE(CLIENT_BASED_GEOLOCATION) 606 page->geolocationController()->requestPermission(this); 607 #else 600 608 page->chrome()->requestGeolocationPermissionForFrame(m_frame, this); 609 #endif 601 610 } 602 611 -
trunk/WebCore/page/GeolocationClient.h
r71903 r73163 29 29 namespace WebCore { 30 30 31 class Geolocation; 31 32 class GeolocationPosition; 32 33 … … 44 45 virtual GeolocationPosition* lastPosition() = 0; 45 46 47 virtual void requestPermission(Geolocation*) = 0; 48 virtual void cancelPermissionRequest(Geolocation*) = 0; 49 46 50 protected: 47 51 virtual ~GeolocationClient() { } -
trunk/WebCore/page/GeolocationController.cpp
r71903 r73163 79 79 } 80 80 81 void GeolocationController::requestPermission(Geolocation* geolocation) 82 { 83 if (m_client) 84 m_client->requestPermission(geolocation); 85 } 86 87 void GeolocationController::cancelPermissionRequest(Geolocation* geolocation) 88 { 89 if (m_client) 90 m_client->cancelPermissionRequest(geolocation); 91 } 92 81 93 void GeolocationController::positionChanged(GeolocationPosition* position) 82 94 { -
trunk/WebCore/page/GeolocationController.h
r71903 r73163 49 49 void removeObserver(Geolocation*); 50 50 51 void requestPermission(Geolocation*); 52 void cancelPermissionRequest(Geolocation*); 53 51 54 void positionChanged(GeolocationPosition*); 52 55 void errorOccurred(GeolocationError*); -
trunk/WebCore/platform/mock/GeolocationClientMock.cpp
r72581 r73163 42 42 GeolocationClientMock::GeolocationClientMock() 43 43 : m_controller(0) 44 , m_timer(this, &GeolocationClientMock::timerFired) 44 , m_controllerTimer(this, &GeolocationClientMock::controllerTimerFired) 45 , m_permissionTimer(this, &GeolocationClientMock::permissionTimerFired) 45 46 , m_isActive(false) 47 , m_permissionState(PermissionStateUnset) 46 48 { 47 49 } … … 72 74 } 73 75 76 void GeolocationClientMock::setPermission(bool allowed) 77 { 78 m_permissionState = allowed ? PermissionStateAllowed : PermissionStateDenied; 79 asyncUpdatePermission(); 80 } 81 82 void GeolocationClientMock::requestPermission(Geolocation* geolocation) 83 { 84 m_pendingPermission.add(geolocation); 85 if (m_permissionState != PermissionStateUnset) 86 asyncUpdatePermission(); 87 } 88 89 void GeolocationClientMock::cancelPermissionRequest(Geolocation* geolocation) 90 { 91 // Called from Geolocation::disconnectFrame() in response to Frame destruction. 92 m_pendingPermission.remove(geolocation); 93 if (m_pendingPermission.isEmpty() && m_permissionTimer.isActive()) 94 m_permissionTimer.stop(); 95 } 96 97 void GeolocationClientMock::asyncUpdatePermission() 98 { 99 ASSERT(m_permissionState != PermissionStateUnset); 100 if (!m_permissionTimer.isActive()) 101 m_permissionTimer.startOneShot(0); 102 } 103 104 void GeolocationClientMock::permissionTimerFired(WebCore::Timer<GeolocationClientMock>* timer) 105 { 106 ASSERT_UNUSED(timer, timer == &m_permissionTimer); 107 ASSERT(m_permissionState != PermissionStateUnset); 108 bool allowed = m_permissionState == PermissionStateAllowed; 109 GeolocationSet::iterator end = m_pendingPermission.end(); 110 111 // Once permission has been set (or denied) on a Geolocation object, there can be 112 // no further requests for permission to the mock. Consequently the callbacks 113 // which fire synchronously from Geolocation::setIsAllowed() cannot reentrantly modify 114 // m_pendingPermission. 115 for (GeolocationSet::iterator it = m_pendingPermission.begin(); it != end; ++it) 116 (*it)->setIsAllowed(allowed); 117 m_pendingPermission.clear(); 118 } 119 74 120 void GeolocationClientMock::reset() 75 121 { 76 122 m_lastPosition = 0; 77 123 m_lastError = 0; 124 m_permissionState = PermissionStateUnset; 78 125 } 79 126 … … 94 141 ASSERT(m_isActive); 95 142 m_isActive = false; 96 m_ timer.stop();143 m_controllerTimer.stop(); 97 144 } 98 145 … … 111 158 { 112 159 ASSERT(m_controller); 113 if (m_isActive && !m_ timer.isActive())114 m_ timer.startOneShot(0);160 if (m_isActive && !m_controllerTimer.isActive()) 161 m_controllerTimer.startOneShot(0); 115 162 } 116 163 117 void GeolocationClientMock:: timerFired(Timer<GeolocationClientMock>* timer)164 void GeolocationClientMock::controllerTimerFired(Timer<GeolocationClientMock>* timer) 118 165 { 119 ASSERT_UNUSED(timer, timer == &m_timer); 120 updateController(); 121 } 122 123 void GeolocationClientMock::updateController() 124 { 166 ASSERT_UNUSED(timer, timer == &m_controllerTimer); 125 167 ASSERT(m_controller); 126 168 -
trunk/WebCore/platform/mock/GeolocationClientMock.h
r72581 r73163 38 38 #include "Timer.h" 39 39 40 #include <wtf/HashSet.h> 40 41 #include <wtf/PassRefPtr.h> 41 42 #include <wtf/RefPtr.h> … … 58 59 void setError(PassRefPtr<GeolocationError>); 59 60 void setPosition(PassRefPtr<GeolocationPosition>); 61 void setPermission(bool allowed); 60 62 61 63 // GeolocationClient … … 65 67 virtual void setEnableHighAccuracy(bool); 66 68 virtual GeolocationPosition* lastPosition(); 69 virtual void requestPermission(Geolocation*); 70 virtual void cancelPermissionRequest(Geolocation*); 67 71 68 72 private: 69 void timerFired(Timer<GeolocationClientMock>*);70 73 void asyncUpdateController(); 71 void updateController(); 74 void controllerTimerFired(Timer<GeolocationClientMock>*); 75 76 void asyncUpdatePermission(); 77 void permissionTimerFired(Timer<GeolocationClientMock>*); 72 78 73 79 GeolocationController* m_controller; 74 80 RefPtr<GeolocationPosition> m_lastPosition; 75 81 RefPtr<GeolocationError> m_lastError; 76 Timer<GeolocationClientMock> m_timer; 82 Timer<GeolocationClientMock> m_controllerTimer; 83 Timer<GeolocationClientMock> m_permissionTimer; 77 84 bool m_isActive; 85 86 enum PermissionState { 87 PermissionStateUnset, 88 PermissionStateAllowed, 89 PermissionStateDenied, 90 } m_permissionState; 91 typedef WTF::HashSet<RefPtr<Geolocation> > GeolocationSet; 92 GeolocationSet m_pendingPermission; 78 93 }; 79 94 -
trunk/WebKit/mac/ChangeLog
r73149 r73163 1 2010-12-02 John Knottenbelt <jknotten@chromium.org> 2 3 Reviewed by Steve Block. 4 5 Move requestGeolocationPermissionForFrame to GeolocationClient 6 https://bugs.webkit.org/show_bug.cgi?id=50061 7 8 This change facilitates client-based geolocation implementation by 9 bringing together permission control into the geolocation client 10 interface. 11 12 Move method ChromeClient::requestGeolocationPermissionForFrame to 13 GeolocationClient::requestPermission, and supporting class 14 WebGeolocationPolicyListener. The moved code is unchanged except 15 that requestPermission now takes only one argument (Geolocation*) 16 and the Frame parameter is retrieved from the Geolocation object. 17 18 * WebCoreSupport/WebChromeClient.h: 19 * WebCoreSupport/WebChromeClient.mm: 20 * WebCoreSupport/WebGeolocationClient.h: 21 (WebGeolocationClient::cancelPermissionRequest): 22 * WebCoreSupport/WebGeolocationClient.mm: 23 (WebGeolocationClient::requestPermission): 24 (-[WebGeolocationPolicyListener initWithGeolocation:]): 25 (-[WebGeolocationPolicyListener allow]): 26 (-[WebGeolocationPolicyListener deny]): 27 1 28 2010-12-02 Joseph Pecoraro <joepeck@webkit.org> 2 29 -
trunk/WebKit/mac/WebCoreSupport/WebChromeClient.h
r71541 r73163 173 173 #endif 174 174 175 virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*); 175 // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373 176 // For client-based geolocation, these two methods have moved to WebGeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061 177 virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*) { } 176 178 virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*) { } 177 179 -
trunk/WebKit/mac/WebCoreSupport/WebChromeClient.mm
r71541 r73163 56 56 #import <WebCore/Frame.h> 57 57 #import <WebCore/FrameLoadRequest.h> 58 #import <WebCore/Geolocation.h>59 58 #import <WebCore/HTMLNames.h> 60 59 #import <WebCore/HitTestResult.h> … … 101 100 } 102 101 - (id)initWithChooser:(PassRefPtr<FileChooser>)chooser; 103 @end104 105 @interface WebGeolocationPolicyListener : NSObject <WebGeolocationPolicyListener>106 {107 RefPtr<Geolocation> _geolocation;108 }109 - (id)initWithGeolocation:(Geolocation*)geolocation;110 102 @end 111 103 … … 850 842 #endif 851 843 852 void WebChromeClient::requestGeolocationPermissionForFrame(Frame* frame, Geolocation* geolocation)853 {854 BEGIN_BLOCK_OBJC_EXCEPTIONS;855 856 SEL selector = @selector(webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:);857 if (![[m_webView UIDelegate] respondsToSelector:selector]) {858 geolocation->setIsAllowed(false);859 return;860 }861 862 WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:frame->document()->securityOrigin()];863 WebGeolocationPolicyListener* listener = [[WebGeolocationPolicyListener alloc] initWithGeolocation:geolocation];864 865 CallUIDelegate(m_webView, selector, webOrigin, kit(frame), listener);866 867 [webOrigin release];868 [listener release];869 870 END_BLOCK_OBJC_EXCEPTIONS;871 }872 873 844 @implementation WebOpenPanelResultListener 874 845 … … 933 904 @end 934 905 935 @implementation WebGeolocationPolicyListener936 937 - (id)initWithGeolocation:(Geolocation*)geolocation938 {939 if (!(self = [super init]))940 return nil;941 _geolocation = geolocation;942 return self;943 }944 945 - (void)allow946 {947 _geolocation->setIsAllowed(true);948 }949 950 - (void)deny951 {952 _geolocation->setIsAllowed(false);953 }954 955 @end956 957 906 #if ENABLE(FULLSCREEN_API) 958 907 -
trunk/WebKit/mac/WebCoreSupport/WebGeolocationClient.h
r71903 r73163 27 27 28 28 namespace WebCore { 29 class GeolocationPosition; 29 class Geolocation; 30 class GeolocationPosition; 30 31 } 31 32 … … 44 45 WebCore::GeolocationPosition* lastPosition(); 45 46 47 void requestPermission(WebCore::Geolocation*); 48 void cancelPermissionRequest(WebCore::Geolocation*) { }; 49 46 50 private: 47 51 WebView *m_webView; -
trunk/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm
r71903 r73163 26 26 #import "WebGeolocationClient.h" 27 27 28 #import "WebDelegateImplementationCaching.h" 29 #import "WebFrameInternal.h" 28 30 #import "WebGeolocationPositionInternal.h" 31 #import "WebSecurityOriginInternal.h" 32 #import "WebUIDelegatePrivate.h" 29 33 #import "WebViewInternal.h" 34 #import <WebCore/BlockExceptions.h> 35 #import <WebCore/Frame.h> 36 #import <WebCore/Geolocation.h> 30 37 31 38 using namespace WebCore; 39 40 @interface WebGeolocationPolicyListener : NSObject <WebGeolocationPolicyListener> 41 { 42 RefPtr<Geolocation> _geolocation; 43 } 44 - (id)initWithGeolocation:(Geolocation*)geolocation; 45 @end 32 46 33 47 WebGeolocationClient::WebGeolocationClient(WebView *webView) … … 51 65 } 52 66 67 void WebGeolocationClient::requestPermission(Geolocation* geolocation) 68 { 69 BEGIN_BLOCK_OBJC_EXCEPTIONS; 70 71 SEL selector = @selector(webView:decidePolicyForGeolocationRequestFromOrigin:frame:listener:); 72 if (![[m_webView UIDelegate] respondsToSelector:selector]) { 73 geolocation->setIsAllowed(false); 74 return; 75 } 76 77 Frame *frame = geolocation->frame(); 78 WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:frame->document()->securityOrigin()]; 79 WebGeolocationPolicyListener* listener = [[WebGeolocationPolicyListener alloc] initWithGeolocation:geolocation]; 80 81 CallUIDelegate(m_webView, selector, webOrigin, kit(frame), listener); 82 83 [webOrigin release]; 84 [listener release]; 85 86 END_BLOCK_OBJC_EXCEPTIONS; 87 } 88 53 89 GeolocationPosition* WebGeolocationClient::lastPosition() 54 90 { … … 59 95 #endif 60 96 } 97 98 @implementation WebGeolocationPolicyListener 99 100 - (id)initWithGeolocation:(Geolocation*)geolocation 101 { 102 if (!(self = [super init])) 103 return nil; 104 _geolocation = geolocation; 105 return self; 106 } 107 108 - (void)allow 109 { 110 _geolocation->setIsAllowed(true); 111 } 112 113 - (void)deny 114 { 115 _geolocation->setIsAllowed(false); 116 } 117 118 @end 119 -
trunk/WebKit/win/ChangeLog
r73088 r73163 1 2010-12-02 John Knottenbelt <jknotten@chromium.org> 2 3 Reviewed by Steve Block. 4 5 Move requestGeolocationPermissionForFrame to GeolocationClient 6 https://bugs.webkit.org/show_bug.cgi?id=50061 7 8 This change facilitates client-based geolocation implementation by 9 bringing together permission control into the geolocation client 10 interface. 11 12 Move method ChromeClient::requestGeolocationPermissionForFrame to 13 GeolocationClient::requestPermission. The moved code is unchanged 14 except that requestPermission now takes only one argument (Geolocation*), 15 the Frame parameter is retrieved from the Geolocation object and we need to 16 call m_webView.get() as it is a COMPtr in GeolocationClient. 17 18 * WebCoreSupport/WebChromeClient.cpp: 19 * WebCoreSupport/WebChromeClient.h: 20 * WebCoreSupport/WebGeolocationClient.cpp: 21 (WebGeolocationClient::requestPermission): 22 * WebCoreSupport/WebGeolocationClient.h: 23 (WebGeolocationClient::cancelPermissionRequest): 24 1 25 2010-12-01 Jia Pu <jpu@apple.com> 2 26 -
trunk/WebKit/win/WebCoreSupport/WebChromeClient.cpp
r71541 r73163 33 33 #include "WebElementPropertyBag.h" 34 34 #include "WebFrame.h" 35 #include "WebGeolocationPolicyListener.h"36 35 #include "WebHistory.h" 37 36 #include "WebMutableURLRequest.h" … … 47 46 #include <WebCore/FrameLoadRequest.h> 48 47 #include <WebCore/FrameView.h> 49 #include <WebCore/Geolocation.h>50 48 #include <WebCore/HTMLNames.h> 51 49 #include <WebCore/Icon.h> … … 818 816 } 819 817 820 void WebChromeClient::requestGeolocationPermissionForFrame(Frame* frame, Geolocation* geolocation)821 {822 COMPtr<IWebUIDelegate> uiDelegate;823 if (FAILED(m_webView->uiDelegate(&uiDelegate))) {824 geolocation->setIsAllowed(false);825 return;826 }827 828 COMPtr<IWebUIDelegatePrivate2> uiDelegatePrivate2(Query, uiDelegate);829 if (!uiDelegatePrivate2) {830 geolocation->setIsAllowed(false);831 return;832 }833 834 COMPtr<WebSecurityOrigin> origin(AdoptCOM, WebSecurityOrigin::createInstance(frame->document()->securityOrigin()));835 COMPtr<WebGeolocationPolicyListener> listener = WebGeolocationPolicyListener::createInstance(geolocation);836 HRESULT hr = uiDelegatePrivate2->decidePolicyForGeolocationRequest(m_webView, kit(frame), origin.get(), listener.get());837 if (hr != E_NOTIMPL)838 return;839 840 geolocation->setIsAllowed(false);841 }842 843 818 #if USE(ACCELERATED_COMPOSITING) 844 819 void WebChromeClient::attachRootGraphicsLayer(Frame* frame, GraphicsLayer* graphicsLayer) -
trunk/WebKit/win/WebCoreSupport/WebChromeClient.h
r71548 r73163 160 160 virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const {} 161 161 162 virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*); 162 // FIXME: Remove once all ports are using client-based geolocation. https://bugs.webkit.org/show_bug.cgi?id=40373 163 // For client-based geolocation, these two methods have been moved to WebGeolocationClient. https://bugs.webkit.org/show_bug.cgi?id=50061 164 virtual void requestGeolocationPermissionForFrame(WebCore::Frame*, WebCore::Geolocation*) { } 163 165 virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*) { } 164 166 -
trunk/WebKit/win/WebCoreSupport/WebGeolocationClient.cpp
r71903 r73163 28 28 #include "WebGeolocationClient.h" 29 29 30 #include "WebFrame.h" 31 #include "WebGeolocationPolicyListener.h" 30 32 #include "WebGeolocationPosition.h" 33 #include "WebSecurityOrigin.h" 31 34 #include "WebView.h" 35 #include <WebCore/Frame.h> 36 #include <WebCore/Geolocation.h> 37 #include <WebCore/SecurityOrigin.h> 32 38 33 39 using namespace WebCore; … … 73 79 #endif 74 80 } 81 82 void WebGeolocationClient::requestPermission(Geolocation* geolocation) 83 { 84 COMPtr<IWebUIDelegate> uiDelegate; 85 if (FAILED(m_webView->uiDelegate(&uiDelegate))) { 86 geolocation->setIsAllowed(false); 87 return; 88 } 89 90 COMPtr<IWebUIDelegatePrivate2> uiDelegatePrivate2(Query, uiDelegate); 91 if (!uiDelegatePrivate2) { 92 geolocation->setIsAllowed(false); 93 return; 94 } 95 96 Frame* frame = geolocation->frame(); 97 COMPtr<WebSecurityOrigin> origin(AdoptCOM, WebSecurityOrigin::createInstance(frame->document()->securityOrigin())); 98 COMPtr<WebGeolocationPolicyListener> listener = WebGeolocationPolicyListener::createInstance(geolocation); 99 HRESULT hr = uiDelegatePrivate2->decidePolicyForGeolocationRequest(m_webView.get(), kit(frame), origin.get(), listener.get()); 100 if (hr != E_NOTIMPL) 101 return; 102 103 geolocation->setIsAllowed(false); 104 } -
trunk/WebKit/win/WebCoreSupport/WebGeolocationClient.h
r71903 r73163 31 31 32 32 namespace WebCore { 33 class GeolocationPosition; 33 class Geolocation; 34 class GeolocationPosition; 34 35 } 35 36 … … 46 47 virtual WebCore::GeolocationPosition* lastPosition(); 47 48 49 virtual void requestPermission(WebCore::Geolocation*); 50 virtual void cancelPermissionRequest(WebCore::Geolocation*) { } 51 48 52 private: 49 53 COMPtr<WebView> m_webView;
Note: See TracChangeset
for help on using the changeset viewer.