2007-08-28 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / WebBrowser.cs
1 // Permission is hereby granted, free of charge, to any person obtaining\r
2 // a copy of this software and associated documentation files (the\r
3 // "Software"), to deal in the Software without restriction, including\r
4 // without limitation the rights to use, copy, modify, merge, publish,\r
5 // distribute, sublicense, and/or sell copies of the Software, and to\r
6 // permit persons to whom the Software is furnished to do so, subject to\r
7 // the following conditions:\r
8 // \r
9 // The above copyright notice and this permission notice shall be\r
10 // included in all copies or substantial portions of the Software.\r
11 // \r
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
19 //\r
20 // Copyright (c) 2007 Novell, Inc.\r
21 //\r
22 // Authors:\r
23 //      Andreia Gaita   <avidigal@novell.com>\r
24 \r
25 #if NET_2_0\r
26 \r
27 using System;\r
28 using System.ComponentModel;\r
29 using System.Runtime.InteropServices;\r
30 using System.Windows.Forms;\r
31 using System.IO;\r
32 \r
33 namespace System.Windows.Forms\r
34 {\r
35         [MonoTODO ("Needs Implementation")]\r
36         [ClassInterface (ClassInterfaceType.AutoDispatch)]\r
37     [ComVisible(true)]\r
38     [Designer("System.Windows.Forms.Design.WebBrowserBaseDesigner, " + Consts.AssemblySystem_Design, \r
39                 "System.ComponentModel.Design.IDesigner")]\r
40     public class WebBrowser : WebBrowserBase\r
41     {\r
42                 private bool allowNavigation;\r
43                 private bool allowWebBrowserDrop;\r
44                 private bool canGoBack;\r
45                 private bool canGoForward;\r
46                 private bool isWebBrowserContextMenuEnabled;\r
47                 private object objectForScripting;\r
48                 private bool scriptErrorsSuppressed;\r
49                 private bool scrollBarsEnabled;\r
50                 private string statusText;\r
51                 private bool webBrowserShortcutsEnabled;\r
52 \r
53                 #region Public Properties\r
54 \r
55                 [MonoTODO ("Stub, not implemented")]\r
56                 [DefaultValue(true)]\r
57                 public bool AllowNavigation {\r
58                         get { return allowNavigation; }\r
59                         set { allowNavigation = value; } \r
60                 }\r
61 \r
62                 [MonoTODO ("Stub, not implemented")]\r
63                 [DefaultValue (true)]\r
64                 public bool AllowWebBrowserDrop {\r
65                         get { return allowWebBrowserDrop; }\r
66                         set { allowWebBrowserDrop = value; }\r
67                 }\r
68 \r
69                 [MonoTODO ("Stub, not implemented")]\r
70                 [DefaultValue (true)]\r
71                 public bool CanGoBack {\r
72                         get { return canGoBack; }\r
73                 }\r
74 \r
75                 [MonoTODO ("Stub, not implemented")]\r
76                 [DefaultValue (true)]\r
77                 public bool CanGoForward {\r
78                         get { return canGoForward; }\r
79                 }\r
80 \r
81                 [MonoTODO ("Stub, not implemented")]\r
82                 public HtmlDocument Document {\r
83                         get { throw new NotImplementedException (); }\r
84                 }\r
85 \r
86                 [MonoTODO ("Stub, not implemented")]\r
87                 public Stream DocumentStream {\r
88                         get { return null; }\r
89                         set {  }\r
90                 }\r
91 \r
92                 [MonoTODO ("Stub, not implemented")]\r
93                 public string DocumentText {\r
94                         get { return String.Empty; }\r
95                         set { throw new NotSupportedException (); }\r
96                 }\r
97 \r
98                 [MonoTODO ("Stub, not implemented")]\r
99                 public string DocumentTitle {\r
100                         get { return String.Empty; }\r
101                         set { throw new NotSupportedException (); }\r
102                 }\r
103 \r
104                 [MonoTODO ("Stub, not implemented")]\r
105                 public string DocumentType {\r
106                         get { return String.Empty; }\r
107                         set { throw new NotSupportedException (); }\r
108                 }\r
109 \r
110                 [MonoTODO ("Stub, not implemented")]\r
111                 public WebBrowserEncryptionLevel EncryptionLevel {\r
112                         get { return WebBrowserEncryptionLevel.Unknown; }\r
113                 }\r
114 \r
115                 [MonoTODO ("Stub, not implemented")]\r
116                 public override bool Focused {\r
117                         get { return base.Focused; }\r
118                 }\r
119 \r
120                 [MonoTODO ("Stub, not implemented")]\r
121                 public bool IsBusy {\r
122                         get { return false; }\r
123                 }\r
124 \r
125                 [MonoTODO ("Stub, not implemented")]\r
126                 public bool IsOffline {\r
127                         get { return true; }\r
128                 }\r
129 \r
130                 [MonoTODO ("Stub, not implemented")]\r
131                 public bool IsWebBrowserContextMenuEnabled { \r
132                         get { return isWebBrowserContextMenuEnabled; } \r
133                         set { isWebBrowserContextMenuEnabled = value; } \r
134                 }\r
135 \r
136                 [MonoTODO ("Stub, not implemented")]\r
137                 public object ObjectForScripting {\r
138                         get { return objectForScripting; }\r
139                         set { objectForScripting = value; }\r
140                 }\r
141 \r
142                 [MonoTODO ("Stub, not implemented")]\r
143                 public WebBrowserReadyState ReadyState { \r
144                         get { return WebBrowserReadyState.Uninitialized; }\r
145                 }\r
146 \r
147                 [MonoTODO ("Stub, not implemented")]\r
148                 public bool ScriptErrorsSuppressed {\r
149                         get { return scriptErrorsSuppressed; }\r
150                         set { scriptErrorsSuppressed = value; }\r
151                 }\r
152 \r
153                 [MonoTODO ("Stub, not implemented")]\r
154                 public bool ScrollBarsEnabled {\r
155                         get { return scrollBarsEnabled; }\r
156                         set { scrollBarsEnabled = value; }\r
157                 }\r
158 \r
159                 [MonoTODO ("Stub, not implemented")]\r
160                 public virtual string StatusText {\r
161                         get { return statusText; }\r
162                         set { statusText = value; }\r
163                 }\r
164 \r
165                 [MonoTODO ("Stub, not implemented")]\r
166                 [BindableAttribute(true)] \r
167                 public Uri Url {\r
168                         get { return null; }\r
169                         set { this.Navigate (value); }\r
170                 }\r
171 \r
172                 [MonoTODO ("Stub, not implemented")]\r
173                 public Version Version {\r
174                         get { return null; }\r
175                 }\r
176 \r
177                 [MonoTODO ("Stub, not implemented")]\r
178                 public bool WebBrowserShortcutsEnabled {\r
179                         get { return webBrowserShortcutsEnabled; }\r
180                         set { webBrowserShortcutsEnabled = value; }\r
181                 }\r
182 \r
183                 #endregion\r
184 \r
185                 [MonoTODO ("Stub, not implemented")]\r
186                 public WebBrowser ()\r
187                 {\r
188                 }\r
189 \r
190                 #region Public Methods\r
191 \r
192                 public bool GoBack ()\r
193                 {\r
194                         return WebHost.Back ();\r
195                 }\r
196 \r
197                 public bool GoForward ()\r
198                 {\r
199                         return WebHost.Forward ();\r
200                 }\r
201 \r
202                 public void GoHome ()\r
203                 {\r
204                         WebHost.Home ();\r
205                 }\r
206 \r
207                 public void GoSearch ()\r
208                 {\r
209                         throw new NotImplementedException ();\r
210                 }\r
211 \r
212                 public void Navigate (string urlString)\r
213                 {\r
214                         WebHost.Navigate (urlString);\r
215                 }\r
216 \r
217                 public void Navigate (Uri url)\r
218                 {\r
219                         WebHost.Navigate (url.ToString ());\r
220                 }\r
221 \r
222                 public void Navigate (string urlString, bool newWindow)\r
223                 {\r
224                         throw new NotImplementedException ();\r
225                 }\r
226 \r
227                 public void Navigate (string urlString, string targetFrameName)\r
228                 {\r
229                         throw new NotImplementedException ();\r
230                 }\r
231 \r
232                 public void Navigate (Uri url, bool newWindow)\r
233                 {\r
234                         throw new NotImplementedException ();\r
235                 }\r
236 \r
237                 public void Navigate (Uri url, string targetFrameName)\r
238                 {\r
239                         throw new NotImplementedException ();\r
240                 }\r
241 \r
242                 public void Navigate (string urlString, string targetFrameName, byte[] postData, string additionalHeaders)\r
243                 {\r
244                         throw new NotImplementedException ();\r
245                 }\r
246 \r
247                 public void Navigate (Uri url, string targetFrameName, byte[] postData, string additionalHeaders)\r
248                 {\r
249                         throw new NotImplementedException ();\r
250                 }\r
251 \r
252                 public void Print ()\r
253                 {\r
254                         throw new NotImplementedException ();\r
255                 }\r
256 \r
257                 public override void Refresh ()\r
258                 {\r
259                         WebHost.Reload (Mono.WebBrowser.ReloadOption.Full);\r
260                 }\r
261 \r
262                 public void Refresh (WebBrowserRefreshOption opt)\r
263                 {\r
264                         switch (opt) {\r
265                                 case WebBrowserRefreshOption.Normal:\r
266                                         WebHost.Reload (Mono.WebBrowser.ReloadOption.Proxy);\r
267                                         break;\r
268                                 case WebBrowserRefreshOption.IfExpired:\r
269                                         WebHost.Reload (Mono.WebBrowser.ReloadOption.None);\r
270                                         break;\r
271                                 case WebBrowserRefreshOption.Completely:\r
272                                         WebHost.Reload (Mono.WebBrowser.ReloadOption.Full);\r
273                                         break;\r
274                         }\r
275                 }\r
276 \r
277                 public void ShowPageSetupDialog()\r
278                 {\r
279                         throw new NotImplementedException ();\r
280                 }\r
281 \r
282                 public void ShowPrintDialog()\r
283                 {\r
284                         throw new NotImplementedException ();\r
285                 }\r
286                 \r
287                 public void ShowPrintPreviewDialog()\r
288                 {\r
289                         throw new NotImplementedException ();\r
290                 }\r
291                 \r
292                 public void ShowPropertiesDialog()\r
293                 {\r
294                         throw new NotImplementedException ();\r
295                 }\r
296                 \r
297                 public void ShowSaveAsDialog()\r
298                 {\r
299                         throw new NotImplementedException ();\r
300                 }\r
301 \r
302                 public void Stop()\r
303                 {\r
304                         WebHost.Stop ();\r
305                 }\r
306 \r
307                 #endregion\r
308 \r
309 \r
310                 #region Protected Overridden Methods\r
311                 [MonoTODO ("Stub, not implemented")]\r
312                 protected override void AttachInterfaces (object nativeActiveXObject)\r
313                 {\r
314                         base.AttachInterfaces (nativeActiveXObject);\r
315                 }\r
316 \r
317                 [MonoTODO ("Stub, not implemented")]\r
318                 protected override void CreateSink ()\r
319                 {\r
320                         base.CreateSink ();\r
321                 }\r
322 \r
323                 [MonoTODO ("Stub, not implemented")]\r
324                 protected override WebBrowserSiteBase CreateWebBrowserSiteBase ()\r
325                 {\r
326                         return base.CreateWebBrowserSiteBase ();\r
327                 }\r
328 \r
329                 [MonoTODO ("Stub, not implemented")]\r
330                 protected override void DetachInterfaces ()\r
331                 {\r
332                         base.DetachInterfaces ();\r
333                 }\r
334 \r
335                 [MonoTODO ("Stub, not implemented")]\r
336                 protected override void DetachSink ()\r
337                 {\r
338                         base.DetachSink ();\r
339                 }\r
340 \r
341                 [MonoTODO ("Stub, not implemented")]\r
342                 protected override void Dispose (bool disposing)\r
343                 {\r
344                         base.Dispose (disposing);\r
345                 }\r
346 \r
347                 [MonoTODO ("Stub, not implemented")]\r
348                 protected override void WndProc (ref Message m)\r
349                 {\r
350                         base.WndProc (ref m);\r
351                 }\r
352                 #endregion\r
353 \r
354                 #region OnXXX methods\r
355                 protected virtual void OnCanGoBackChanged(EventArgs e)\r
356                 {\r
357                         EventHandler eh = (EventHandler)(Events [CanGoBackChangedEvent]);\r
358                         if (eh != null)\r
359                                 eh (this, e);\r
360                 }\r
361 \r
362                 protected virtual void OnCanGoForwardChanged(EventArgs e)\r
363                 {\r
364                         EventHandler eh = (EventHandler)(Events [CanGoForwardChangedEvent]);\r
365                         if (eh != null)\r
366                                 eh (this, e);\r
367                 }\r
368 \r
369                 protected virtual void OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e)\r
370                 {\r
371                         WebBrowserDocumentCompletedEventHandler eh = (WebBrowserDocumentCompletedEventHandler)(Events [DocumentCompletedEvent]);\r
372                         if (eh != null)\r
373                                 eh (this, e);\r
374                 }\r
375 \r
376                 protected virtual void OnDocumentTitleChanged(EventArgs e)\r
377                 {\r
378                         EventHandler eh = (EventHandler)(Events [DocumentTitleChangedEvent]);\r
379                         if (eh != null)\r
380                                 eh (this, e);\r
381                 }\r
382 \r
383                 protected virtual void OnEncryptionLevelChanged(EventArgs e)\r
384                 {\r
385                         EventHandler eh = (EventHandler)(Events [EncryptionLevelChangedEvent]);\r
386                         if (eh != null)\r
387                                 eh (this, e);\r
388                 }\r
389 \r
390                 protected virtual void OnFileDownload(EventArgs e)\r
391                 {\r
392                         EventHandler eh = (EventHandler)(Events [FileDownloadEvent]);\r
393                         if (eh != null)\r
394                                 eh (this, e);\r
395                 }\r
396 \r
397                 protected virtual void OnNavigated(WebBrowserNavigatedEventArgs e)\r
398                 {\r
399                         WebBrowserNavigatedEventHandler eh = (WebBrowserNavigatedEventHandler)(Events [NavigatedEvent]);\r
400                         if (eh != null)\r
401                                 eh (this, e);\r
402                 }\r
403 \r
404                 protected virtual void OnNavigating(WebBrowserNavigatingEventArgs e)\r
405                 {\r
406                         WebBrowserNavigatingEventHandler eh = (WebBrowserNavigatingEventHandler)(Events [NavigatingEvent]);\r
407                         if (eh != null)\r
408                                 eh (this, e);\r
409                 }\r
410 \r
411                 protected virtual void OnNewWindow(CancelEventArgs e)\r
412                 {\r
413                         CancelEventHandler eh = (CancelEventHandler)(Events [NewWindowEvent]);\r
414                         if (eh != null)\r
415                                 eh (this, e);\r
416                 }\r
417 \r
418                 protected virtual void OnProgressChanged(WebBrowserProgressChangedEventArgs e)\r
419                 {\r
420                         WebBrowserProgressChangedEventHandler eh = (WebBrowserProgressChangedEventHandler)(Events [ProgressChangedEvent]);\r
421                         if (eh != null)\r
422                                 eh (this, e);\r
423                 }\r
424 \r
425                 protected virtual void OnStatusTextChanged(EventArgs e)\r
426                 {\r
427                         EventHandler eh = (EventHandler)(Events [StatusTextChangedEvent]);\r
428                         if (eh != null)\r
429                                 eh (this, e);\r
430                 }\r
431                 #endregion\r
432 \r
433                 #region Events\r
434                 static object CanGoBackChangedEvent = new object ();\r
435                 static object CanGoForwardChangedEvent = new object ();\r
436                 static object DocumentCompletedEvent = new object ();\r
437                 static object DocumentTitleChangedEvent = new object ();\r
438                 static object EncryptionLevelChangedEvent = new object ();\r
439                 static object FileDownloadEvent = new object ();\r
440                 static object NavigatedEvent = new object ();\r
441                 static object NavigatingEvent = new object ();\r
442                 static object NewWindowEvent = new object ();\r
443                 static object ProgressChangedEvent = new object ();\r
444                 static object StatusTextChangedEvent = new object ();\r
445                 \r
446                 public event EventHandler CanGoBackChanged {\r
447                         add { Events.AddHandler (CanGoBackChangedEvent, value); }\r
448                         remove { Events.RemoveHandler (CanGoBackChangedEvent, value); }\r
449                 }\r
450 \r
451                 public event EventHandler CanGoForwardChanged {\r
452                         add { Events.AddHandler (CanGoForwardChangedEvent, value); }\r
453                         remove { Events.RemoveHandler (CanGoForwardChangedEvent, value); }\r
454                 }\r
455 \r
456                 public event WebBrowserDocumentCompletedEventHandler DocumentCompleted {\r
457                         add { Events.AddHandler (DocumentCompletedEvent, value); }\r
458                         remove { Events.RemoveHandler (DocumentCompletedEvent, value); }\r
459                 }\r
460 \r
461                 public event EventHandler DocumentTitleChanged {\r
462                         add { Events.AddHandler (DocumentTitleChangedEvent, value); }\r
463                         remove { Events.RemoveHandler (DocumentTitleChangedEvent, value); }\r
464                 }\r
465 \r
466                 public event EventHandler EncryptionLevelChanged {\r
467                         add { Events.AddHandler (EncryptionLevelChangedEvent, value); }\r
468                         remove { Events.RemoveHandler (EncryptionLevelChangedEvent, value); }\r
469                 }\r
470 \r
471                 public event EventHandler FileDownload {\r
472                         add { Events.AddHandler (FileDownloadEvent, value); }\r
473                         remove { Events.RemoveHandler (FileDownloadEvent, value); }\r
474                 }\r
475 \r
476                 public event WebBrowserNavigatedEventHandler Navigated {\r
477                         add { Events.AddHandler (NavigatedEvent, value); }\r
478                         remove { Events.RemoveHandler (NavigatedEvent, value); }\r
479                 }\r
480 \r
481                 public event WebBrowserNavigatingEventHandler Navigating {\r
482                         add { Events.AddHandler (NavigatingEvent, value); }\r
483                         remove { Events.RemoveHandler (NavigatingEvent, value); }\r
484                 }\r
485 \r
486                 public event CancelEventHandler NewWindow {\r
487                         add { Events.AddHandler (NewWindowEvent, value); }\r
488                         remove { Events.RemoveHandler (NewWindowEvent, value); }\r
489                 }\r
490                 \r
491                 public event WebBrowserProgressChangedEventHandler ProgressChanged {\r
492                         add { Events.AddHandler (ProgressChangedEvent, value); }\r
493                         remove { Events.RemoveHandler (ProgressChangedEvent, value); }\r
494                 }\r
495 \r
496                 public event EventHandler StatusTextChanged {\r
497                         add { Events.AddHandler (StatusTextChangedEvent, value); }\r
498                         remove { Events.RemoveHandler (StatusTextChangedEvent, value); }\r
499                 }\r
500                 #endregion\r
501 \r
502 \r
503                 #region Internal\r
504                 internal override bool OnNewWindowInternal ()\r
505                 {\r
506                         CancelEventArgs c = new CancelEventArgs ();\r
507                         OnNewWindow (c);\r
508                         return c.Cancel;\r
509                 }\r
510                 #endregion\r
511 \r
512 \r
513                 [MonoTODO ("Stub, not implemented")]\r
514                 protected class WebBrowserSite : WebBrowserSiteBase\r
515                 {\r
516                         [MonoTODO ("Stub, not implemented")]\r
517                         public WebBrowserSite (WebBrowser host)\r
518                                 : base ()\r
519                         {\r
520                         }\r
521 \r
522                 }\r
523     }\r
524 }\r
525 \r
526 #endif