[Tizen] Add BuildTools 2.1.0-rc1-02804-05
[platform/upstream/coreclr.git] / Tools / dotnetcli / sdk / NuGetFallbackFolder / microsoft.identitymodel.clients.activedirectory / 3.14.1 / src / src / ADAL.PCL.Desktop / CustomWebBrowser.cs
1 //----------------------------------------------------------------------
2 //
3 // Copyright (c) Microsoft Corporation.
4 // All rights reserved.
5 //
6 // This code is licensed under the MIT License.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files(the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions :
14 //
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 // THE SOFTWARE.
25 //
26 //------------------------------------------------------------------------------
27
28 using System;
29 using System.Collections.Generic;
30 using System.Runtime.InteropServices;
31 using System.Windows.Forms;
32
33 namespace Microsoft.IdentityModel.Clients.ActiveDirectory.Internal
34 {
35     internal partial class CustomWebBrowser : WebBrowser
36     {
37         private const int S_OK = 0;
38         private const int S_FALSE = 1;
39         private const int WM_CHAR = 0x102;
40
41         private AxHost.ConnectionPointCookie webBrowserEventCookie;
42         private CustomWebBrowserEvent webBrowserEvent;
43         private static readonly HashSet<Shortcut> shortcutBlacklist = new HashSet<Shortcut>();
44
45         static CustomWebBrowser()
46         {
47             shortcutBlacklist.Add(Shortcut.AltBksp);
48             shortcutBlacklist.Add(Shortcut.AltDownArrow);
49             shortcutBlacklist.Add(Shortcut.AltLeftArrow);
50             shortcutBlacklist.Add(Shortcut.AltRightArrow);
51             shortcutBlacklist.Add(Shortcut.AltUpArrow);
52         }
53
54         [ComVisible(true), ComDefaultInterface(typeof(NativeWrapper.IDocHostUIHandler))]
55         protected class CustomSite : WebBrowserSite, NativeWrapper.IDocHostUIHandler, ICustomQueryInterface
56         {
57             private const int NotImplemented = -2147467263;
58
59             private readonly WebBrowser host;
60
61             public CustomSite(WebBrowser host)
62                 : base(host)
63             {
64                 this.host = host;
65             }
66
67
68             public int EnableModeless(bool fEnable)
69             {
70                 return NotImplemented;
71             }
72
73             public int FilterDataObject(System.Runtime.InteropServices.ComTypes.IDataObject pDO, out System.Runtime.InteropServices.ComTypes.IDataObject ppDORet)
74             {
75                 ppDORet = null;
76                 return S_FALSE;
77             }
78
79             public int GetDropTarget(NativeWrapper.IOleDropTarget pDropTarget, out NativeWrapper.IOleDropTarget ppDropTarget)
80             {
81                 ppDropTarget = null;
82                 return S_OK;
83             }
84
85             public int GetExternal(out object ppDispatch)
86             {
87                 ppDispatch = this.host.ObjectForScripting;
88                 return S_OK;
89             }
90             public int GetHostInfo(NativeWrapper.DOCHOSTUIINFO info)
91             {
92                 const int DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION = 0x4000000;
93                 const int DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x0020000;
94                 const int DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 0x00000010;
95                 const int DOCHOSTUIFLAG_NOTHEME = 0x00080000;
96                 const int DOCHOSTUIFLAG_SCROLL_NO = 0x00000008;
97                 const int DOCHOSTUIFLAG_FLAT_SCROLLBAR = 0x00000080;
98                 const int DOCHOSTUIFLAG_THEME = 0x00040000;
99                 const int DOCHOSTUIFLAG_DPI_AWARE = 0x40000000;
100
101                 info.dwDoubleClick = 0;
102                 info.dwFlags = DOCHOSTUIFLAG_NO3DOUTERBORDER | DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE;
103
104                 if (NativeWrapper.NativeMethods.IsProcessDPIAware())
105                 {
106                     info.dwFlags |= DOCHOSTUIFLAG_DPI_AWARE;
107                 }
108
109                 if (this.host.ScrollBarsEnabled)
110                 {
111                     info.dwFlags |= DOCHOSTUIFLAG_FLAT_SCROLLBAR;
112                 }
113                 else
114                 {
115                     info.dwFlags |= DOCHOSTUIFLAG_SCROLL_NO;
116                 }
117                 if (Application.RenderWithVisualStyles)
118                 {
119                     info.dwFlags |= DOCHOSTUIFLAG_THEME;
120                 }
121                 else
122                 {
123                     info.dwFlags |= DOCHOSTUIFLAG_NOTHEME;
124                 }
125
126                 info.dwFlags |= DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION;
127                 return S_OK;
128             }
129
130             public int GetOptionKeyPath(string[] pbstrKey, int dw)
131             {
132                 return NotImplemented;
133             }
134
135             public int HideUI()
136             {
137                 return NotImplemented;
138             }
139
140             public int OnDocWindowActivate(bool fActivate)
141             {
142                 return NotImplemented;
143             }
144
145             public int OnFrameWindowActivate(bool fActivate)
146             {
147                 return NotImplemented;
148             }
149
150             public int ResizeBorder(NativeWrapper.COMRECT rect, NativeWrapper.IOleInPlaceUIWindow doc, bool fFrameWindow)
151             {
152                 return NotImplemented;
153             }
154
155             public int ShowContextMenu(int dwID, NativeWrapper.POINT pt, object pcmdtReserved, object pdispReserved)
156             {
157                 switch (dwID)
158                 {
159                     // http://msdn.microsoft.com/en-us/library/aa753264(v=vs.85).aspx
160                     case 0x2: // this is edit CONTEXT_MENU_CONTROL
161                     case 0x4: // selected text CONTEXT_MENU_TEXTSELECT
162                     case 0x9: // CONTEXT_MENU_VSCROLL
163                     case 0x10: //CONTEXT_MENU_HSCROLL
164                          return S_FALSE; // allow to show menu; Host did not display its UI. MSHTML will display its UI.
165                         
166                 }
167                 return S_OK;
168             }
169
170             public int ShowUI(int dwID, NativeWrapper.IOleInPlaceActiveObject activeObject, NativeWrapper.IOleCommandTarget commandTarget, NativeWrapper.IOleInPlaceFrame frame, NativeWrapper.IOleInPlaceUIWindow doc)
171             {
172                 return S_FALSE;
173             }
174
175             public int TranslateAccelerator(ref NativeWrapper.MSG msg, ref Guid group, int nCmdID)
176             {
177                 if (msg.message != WM_CHAR)
178                 {
179                     if (ModifierKeys == Keys.Shift || ModifierKeys == Keys.Alt || ModifierKeys == Keys.Control)
180                     {
181                         int num = ((int) msg.wParam) | (int) ModifierKeys;
182                         Shortcut s = (Shortcut) num;
183                         if (shortcutBlacklist.Contains(s))
184                         {
185                             return S_OK;
186                         }
187                     }
188                 }
189
190                 return S_FALSE;
191             }
192
193             public int TranslateUrl(int dwTranslate, string strUrlIn, out string pstrUrlOut)
194             {
195                 pstrUrlOut = null;
196                 return S_FALSE;
197             }
198
199             public int UpdateUI()
200             {
201                 return NotImplemented;
202             }
203
204             #region ICustomQueryInterface Members
205
206             public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr ppv)
207             {
208                 ppv = IntPtr.Zero;
209                 if (iid == typeof(NativeWrapper.IDocHostUIHandler).GUID)
210                 {
211                     ppv = Marshal.GetComInterfaceForObject(this, typeof(NativeWrapper.IDocHostUIHandler), CustomQueryInterfaceMode.Ignore);
212                     return CustomQueryInterfaceResult.Handled;
213                 }
214                 return CustomQueryInterfaceResult.NotHandled;
215             }
216
217             #endregion
218         }
219
220         protected override WebBrowserSiteBase CreateWebBrowserSiteBase()
221         {
222             return new CustomSite(this);
223         }
224
225         protected override void CreateSink()
226         {
227             base.CreateSink();
228
229             object activeXInstance = this.ActiveXInstance;
230             if (activeXInstance != null)
231             {
232                 this.webBrowserEvent = new CustomWebBrowserEvent(this);
233                 this.webBrowserEventCookie = new AxHost.ConnectionPointCookie(activeXInstance, this.webBrowserEvent, typeof(NativeWrapper.DWebBrowserEvents2));
234             }
235
236         }
237
238         protected override void DetachSink()
239         {
240             if (this.webBrowserEventCookie != null)
241             {
242                 this.webBrowserEventCookie.Disconnect();
243                 this.webBrowserEventCookie = null;
244             }
245
246             base.DetachSink();
247         }
248
249         protected virtual void OnNavigateError(WebBrowserNavigateErrorEventArgs e)
250         {
251             if (NavigateError != null)
252             {
253                 this.NavigateError(this, e);
254             }
255         }
256         
257
258         public event WebBrowserNavigateErrorEventHandler NavigateError;
259     }
260
261     /// <summary>
262     /// Delegate to handle navifation errors in the browser control
263     /// </summary>
264     /// <param name="sender">object type</param>
265     /// <param name="e">WebBrowserNavigateErrorEventArgs type</param>
266     public delegate void WebBrowserNavigateErrorEventHandler(object sender, WebBrowserNavigateErrorEventArgs e);
267 }