Revert "Revert "Revert "[TFM] Update TizenFX TFM to net6.0 (#5360)" (#5436)" (#5466)"
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.WebViewTest / SimpleWebViewApp.cs
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using System.IO;
20 using System.Text;
21 using Tizen.NUI.BaseComponents;
22 using Tizen.NUI.Components;
23
24 namespace Tizen.NUI.WebViewTest
25 {
26     internal class MenuView : View
27     {
28         private WebContextMenu contextMenu;
29         private Button[] buttons;
30
31         public event EventHandler<ItemClickedEventArgs> ClickedEvent;
32
33         public class ItemClickedEventArgs : EventArgs
34         {
35             public uint CurrentIndex;
36         }
37
38         internal MenuView(WebContextMenu menu)
39         {
40             contextMenu = menu;
41
42             Layout = new LinearLayout()
43             {
44                 LinearOrientation = LinearLayout.Orientation.Vertical,
45                 HorizontalAlignment = HorizontalAlignment.Center
46             };
47
48             buttons = new Button[menu.ItemCount];
49
50             for (uint i = 0; i < menu.ItemCount; i++)
51             {
52                 WebContextMenuItem item = menu.GetItemAtIndex(i);
53                 buttons[i] = new Button()
54                 {
55                     Size = new Size(200, 80),
56                     PointSize = 30.0f,
57                     TextColor = Color.Black,
58                     Text = item.Title,
59                 };
60                 buttons[i].TouchEvent += OnMenuItemTouched;
61                 Add(buttons[i]);
62             }
63         }
64
65         private bool OnMenuItemTouched(object s, TouchEventArgs e)
66         {
67             uint i = 0;
68             for (; i < buttons.Length; i++)
69             {
70                 if (buttons[i] == (Button)s)
71                 {
72                     Log.Info("WebView", $"found button {i} is selected.");
73                     break;
74                 }
75             }
76
77             Log.Info("WebView", $"button {i} is selected.");
78
79             //WebContextMenuItem item = contextMenu.ItemList.GetItemAtIndex(i);
80             //if (item != null)
81             //{
82             //    contextMenu.SelectItem(item);
83             //    contextMenu.Hide();
84             //}
85
86             ItemClickedEventArgs args = new ItemClickedEventArgs();
87             args.CurrentIndex = i;
88             ClickedEvent?.Invoke(this, args);
89
90             Log.Info("WebView", $"button {i} is selected.");
91
92             return false;
93         }
94
95         internal void HideMenu()
96         {
97             contextMenu.Hide();
98         }
99     }
100
101     public class SimpleWebViewApplication : NUIApplication
102     {
103         private BaseComponents.WebView simpleWebView = null;
104         private TextField addressBar = null;
105         private Button backButton = null;
106         private Button forwardButton = null;
107         private Button refreshButton = null;
108
109         private int index = 0;
110         private const int WEBSITES_COUNT = 2;
111         private string[] websites = new string[2];
112         //{
113         //    "https://terms.account.samsung.com/contents/legal/kor/kor/customizedservicecontent.html",
114         //    "https://www.youtube.com"
115         //};
116
117         private string invalidUrl = "https://test/";
118
119         private const string USER_AGENT = "Mozilla/5.0 (SMART-TV; Linux; Tizen 6.0) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/76.0.3809.146 TV Safari/537.36";
120
121         private const int ADDRESSBAR_HEIGHT = 100;
122
123         private const int SCREEN_WIDTH = 1920;
124         private const int SCREEN_HEIGHT = 1080;
125
126         private const int MIN_WEBVIEW_WIDTH = 1000;
127         private const int MIN_WEBVIEW_HEIGHT = 600;
128
129         private const int WEBVIEW_WIDTH = SCREEN_WIDTH;
130         private const int WEBVIEW_HEIGHT = SCREEN_HEIGHT - ADDRESSBAR_HEIGHT;
131
132         private Vector2 menuPosition;
133         private MenuView menuView;
134
135         private int blueKeyPressedCount = 0;
136         private int yellowKeyPressedCount = 0;
137         private int redKeyPressedCount = 0;
138         private int greenKeyPressedCount = 0;
139
140         private static long startTime = 0;
141
142         private Timer messageTimer = null;
143         private ImageView faviconView = null;
144         private ImageView screenshotView = null;
145         private ImageView hitTestImageView = null;
146
147         private static string[] runtimeArgs = { "Tizen.NUI.WebViewTest", "--enable-dali-window", "--enable-spatial-navigation" };
148
149         protected override void OnCreate()
150         {
151             base.OnCreate();
152
153             GetDefaultWindow().BackgroundColor = new Color((float)189 / 255, (float)179 / 255, (float)204 / 255, 1.0f);
154
155             backButton = new Button()
156             {
157                 Position = new Position(0, 0),
158                 Size = new Size(100, 100),
159                 PointSize = 30.0f,
160                 TextColor = Color.Black,
161                 Text = "Back",
162             };
163             backButton.TouchEvent += OnBackButtonTouchEvent;
164             GetDefaultWindow().Add(backButton);
165
166             forwardButton = new Button()
167             {
168                 Position = new Position(100, 0),
169                 Size = new Size(100, 100),
170                 PointSize = 30.0f,
171                 TextColor = Color.Black,
172                 Text = "Forward",
173             };
174             forwardButton.TouchEvent += OnForwardButtonTouchEvent;
175             GetDefaultWindow().Add(forwardButton);
176
177             refreshButton = new Button()
178             {
179                 Position = new Position(200, 0),
180                 Size = new Size(100, 100),
181                 PointSize = 30.0f,
182                 TextColor = Color.Black,
183                 Text = "Refresh",
184             };
185             refreshButton.TouchEvent += OnRefreshButtonTouchEvent;
186             GetDefaultWindow().Add(refreshButton);
187
188             addressBar = new TextField()
189             {
190                 Position = new Position(300, 0),
191                 BackgroundColor = Color.White,
192                 Size = new Size(SCREEN_WIDTH - 300, ADDRESSBAR_HEIGHT),
193                 EnableGrabHandlePopup = false,
194                 EnableGrabHandle = false,
195                 EnableSelection = true,
196                 Focusable = true,
197                 PlaceholderText = "Please input url here like Www.baidu.com.",
198             };
199             addressBar.FocusGained += OnTextEditorFocusGained;
200             addressBar.FocusLost += OnTextEditorFocusLost;
201             addressBar.KeyEvent += OnAddressBarKeyEvent;
202             addressBar.TouchEvent += OnAddressBarTouchEvent;
203             GetDefaultWindow().Add(addressBar);
204
205             Log.Info("WebView", $"args count is {runtimeArgs.Length}");
206             for (int i = 0; i < runtimeArgs.Length; i++)
207             {
208                 Log.Info("WebView", $"arg {i} is {runtimeArgs[i]}");
209             }
210
211             simpleWebView = new BaseComponents.WebView(runtimeArgs)
212             {
213                 Position = new Position(0, ADDRESSBAR_HEIGHT),
214                 Size = new Size(WEBVIEW_WIDTH, WEBVIEW_HEIGHT),
215                 UserAgent = USER_AGENT,
216                 Focusable = true,
217                 VideoHoleEnabled = true,
218             };
219             simpleWebView.FocusGained += OnWebViewFocusGained;
220             simpleWebView.FocusLost += OnWebViewFocusLost;
221             simpleWebView.KeyEvent += OnWebViewKeyEvent;
222             simpleWebView.TouchEvent += OnWebViewTouchEvent;
223             simpleWebView.SslCertificateChanged += OnSslCertificateChanged;
224             //simpleWebView.HttpAuthRequested += OnHttpAuthRequested;
225             simpleWebView.PageLoadStarted += OnPageLoadStarted;
226             simpleWebView.PageLoading += OnPageLoading;
227             simpleWebView.PageLoadFinished += OnPageLoadFinished;
228             simpleWebView.PageLoadError += OnPageLoadError;
229             simpleWebView.ContextMenuShown += OnContextMenuShown;
230             simpleWebView.ContextMenuHidden += OnContextMenuHidden;
231             simpleWebView.ScrollEdgeReached += OnScrollEdgeReached;
232             simpleWebView.UrlChanged += OnUrlChanged;
233             simpleWebView.FormRepostPolicyDecided += OnFormRepostPolicyDecided;
234             //simpleWebView.FrameRendered += OnFrameRendered;
235             simpleWebView.ConsoleMessageReceived += OnConsoleMessageReceived;
236             simpleWebView.CertificateConfirmed += OnCertificateConfirmed;
237             simpleWebView.ResponsePolicyDecided += OnResponsePolicyDecided;
238             simpleWebView.NavigationPolicyDecided += OnNavigationPolicyDecided;
239             GetDefaultWindow().Add(simpleWebView);
240
241             GetDefaultWindow().KeyEvent += Instance_KeyEvent;
242
243             // load local files.
244             websites[0] = $"file://{Tizen.Applications.Application.Current.DirectoryInfo.Resource}test1.html";
245             websites[1] = $"file://{Tizen.Applications.Application.Current.DirectoryInfo.Resource}test2.html";
246
247             simpleWebView.LoadUrl(websites[index]);
248             //simpleWebView.LoadHtmlString("<Html><Head><title>Example</title></Head><Body><b>[This text is Bold......]</b></Body></Html>");
249             FocusManager.Instance.SetCurrentFocusView(simpleWebView);
250
251             messageTimer = new Timer(10000);
252             messageTimer.Tick += OnTick;
253         }
254
255         protected override void OnTerminate()
256         {
257             if (menuView != null)
258             {
259                 GetDefaultWindow().Remove(menuView);
260             }
261             GetDefaultWindow().Remove(backButton);
262             GetDefaultWindow().Remove(forwardButton);
263             GetDefaultWindow().Remove(refreshButton);
264             GetDefaultWindow().Remove(addressBar);
265
266             if (screenshotView != null)
267             {
268                 GetDefaultWindow().Remove(screenshotView);
269             }
270
271             messageTimer.Tick -= OnTick;
272             messageTimer.Dispose();
273             messageTimer = null;
274
275             base.OnTerminate();
276         }
277
278         private bool OnBackButtonTouchEvent(object sender, View.TouchEventArgs e)
279         {
280             if (simpleWebView.CanGoBack())
281             {
282                 simpleWebView.GoBack();
283             }
284             return false;
285         }
286
287         private bool OnForwardButtonTouchEvent(object sender, View.TouchEventArgs e)
288         {
289             if (simpleWebView.CanGoForward())
290             {
291                 simpleWebView.GoForward();
292             }
293             return false;
294         }
295
296         private bool OnRefreshButtonTouchEvent(object sender, View.TouchEventArgs e)
297         {
298             simpleWebView.Reload();
299             return false;
300         }
301
302         private bool OnTick(object sender, EventArgs e)
303         {
304             Log.Info("WebView", $"------------timer tick-------");
305
306             if (faviconView != null)
307             {
308                 GetDefaultWindow().Remove(faviconView);
309                 faviconView.Dispose();
310                 faviconView = null;
311             }
312
313             if (screenshotView != null)
314             {
315                 Log.Info("WebView", $"------------remove screen shot-------");
316                 GetDefaultWindow().Remove(screenshotView);
317                 screenshotView.Dispose();
318                 screenshotView = null;
319             }
320             else
321             {
322                 Log.Info("WebView", $"------------screen shot is null-------");
323             }
324
325             if (hitTestImageView != null)
326             {
327                 GetDefaultWindow().Remove(hitTestImageView);
328                 hitTestImageView.Dispose();
329                 hitTestImageView = null;
330             }
331
332             return false;
333         }
334
335         private bool OnWebViewTouchEvent(object source, View.TouchEventArgs args)
336         {
337             if (!simpleWebView.HasFocus())
338             {
339                 FocusManager.Instance.SetCurrentFocusView(simpleWebView);
340             }
341
342             if (args.Touch.GetState(0) == PointStateType.Down && args.Touch.GetMouseButton(0) == MouseButton.Secondary)
343             {
344                 if (menuView == null && menuPosition == null)
345                 {
346                     menuPosition = args.Touch.GetScreenPosition(0);
347                 }
348             }
349             else if (args.Touch.GetState(0) == PointStateType.Down && args.Touch.GetMouseButton(0) == MouseButton.Primary)
350             {
351                 if (menuView != null)
352                 {
353                     menuView.HideMenu();
354                     GetDefaultWindow().Remove(menuView);
355                     menuView = null;
356                     menuPosition = null;
357                 }
358             }
359             return false;
360         }
361
362         private void OnMenuViewItemSelected(object source, MenuView.ItemClickedEventArgs e)
363         {
364             Log.Info("WebView", $"------------menu item is selected-------");
365             GetDefaultWindow().Remove(menuView);
366             menuView = null;
367         }
368
369         private void OnWebViewFocusGained(object source, EventArgs args)
370         {
371             Log.Info("WebView", $"------------web view focus is gained-------");
372         }
373
374         private void OnWebViewFocusLost(object source, EventArgs args)
375         {
376             Log.Info("WebView", $"------------web view focus is lost-------");
377         }
378
379         private void OnHttpAuthRequested(object sender, WebViewHttpAuthRequestedEventArgs e)
380         {
381             Log.Info("WebView", $"------------http auth requested, Realm: {e.HttpAuthHandler.Realm}-------");
382             e.HttpAuthHandler.CancelCredential();
383             e.HttpAuthHandler.Suspend();
384             e.HttpAuthHandler.UseCredential("", "");
385         }
386
387         private void OnHttpRequestIntercepted(WebHttpRequestInterceptor interceptor)
388         {
389             Log.Info("WebView", $"------------http request intercepted, Url: {interceptor.Url}-------");
390
391             //interceptor.Ignore();
392             if (interceptor.Url.Equals(invalidUrl))
393             {
394                 byte[] bData = Encoding.UTF8.GetBytes("<html><body><img src='test.jpg'></body></html>");
395                 interceptor.SetResponseStatus(200, "OK");
396                 interceptor.AddResponseHeader("Content-Type", "text/html; charset=UTF-8");
397                 interceptor.AddResponseHeader("Content-Length", bData.Length.ToString());
398                 interceptor.SetResponseBody(bData);
399                 Log.Info("WebView", $"------------http request intercepted set response body end-------");
400             }
401             else if (interceptor.Url.Equals($"{invalidUrl}test.jpg"))
402             {
403                 string path = Tizen.Applications.Application.Current.DirectoryInfo.SharedResource + "Tizen.NUI.WebViewTest.png";
404                 using (FileStream fs = File.OpenRead(path))
405                 {
406                     byte[] bData = new byte[1024];
407                     while (fs.Read(bData, 0, bData.Length) > 0)
408                     {
409                         interceptor.WriteResponseChunk(bData);
410                     }
411                     interceptor.WriteResponseChunk((byte[])null);
412                     Log.Info("WebView", $"------------http request intercepted write chunk end-------");
413                 }
414             }
415
416             if (interceptor.InterceptedWebView == simpleWebView)
417             {
418                 Log.Info("WebView", $"------------http request intercepted web view is simpleWebVew-------");
419             }
420
421             Log.Info("WebView", $"------------http request intercepted end-------");
422         }
423
424         private void OnSslCertificateChanged(object sender, WebViewCertificateReceivedEventArgs e)
425         {
426             Log.Info("WebView", $"------------ssl certificate changed, IsFromMainFrame: {e.Certificate.IsFromMainFrame}-------");
427             Log.Info("WebView", $"------------ssl certificate changed, PemData: {e.Certificate.PemData}-------");
428             Log.Info("WebView", $"------------ssl certificate changed, PemData: {e.Certificate.IsContextSecure}-------");
429         }
430
431         private void OnPageLoadStarted(object sender, WebViewPageLoadEventArgs e)
432         {
433             Log.Info("WebView", $"------------web view start to load time: {DateTime.Now.Ticks - startTime}-------");
434         }
435
436         private void OnPageLoading(object sender, WebViewPageLoadEventArgs e)
437         {
438             Log.Info("WebView", $"------------web view is loading-------");
439         }
440
441         private void OnPageLoadFinished(object sender, WebViewPageLoadEventArgs e)
442         {
443             Log.Info("WebView", $"------------web view finishes loading-------");
444
445             if (simpleWebView.CanGoBack())
446             {
447                 backButton.IsEnabled = true;
448             }
449             else
450             {
451                 backButton.IsEnabled = false;
452             }
453
454             if (simpleWebView.CanGoForward())
455             {
456                 forwardButton.IsEnabled = true;
457             }
458             else
459             {
460                 forwardButton.IsEnabled = false;
461             }
462         }
463
464         private void OnPageLoadError(object sender, WebViewPageLoadErrorEventArgs e)
465         {
466             Log.Info("WebView", $"------------web view load error, Url: {e.PageLoadError.Url}-------");
467             Log.Info("WebView", $"------------web view load error, Code: {e.PageLoadError.Code}-------");
468             Log.Info("WebView", $"------------web view load error, Description: {e.PageLoadError.Description}-------");
469             Log.Info("WebView", $"------------web view load error, Type: {e.PageLoadError.Type}-------");
470         }
471
472         private void OnScrollEdgeReached(object sender, WebViewScrollEdgeReachedEventArgs e)
473         {
474             Log.Info("WebView", $"------------scroll edge reached, ScrollEdge: {e.ScrollEdge}-------");
475         }
476
477         private void OnUrlChanged(object sender, WebViewUrlChangedEventArgs e)
478         {
479             Log.Info("WebView", $"------------url changed, NewPageUrl: {e.NewPageUrl}-------");
480         }
481
482         private void OnFormRepostPolicyDecided(object sender, WebViewFormRepostPolicyDecidedEventArgs e)
483         {
484             Log.Info("WebView", $"------------form repost policy decided-------");
485             e.FormRepostPolicyDecisionMaker.Reply(true);
486         }
487
488         private void OnFrameRendered(object sender, EventArgs e)
489         {
490             Log.Info("WebView", $"------------frame rendered-------");
491         }
492
493         private void OnContextMenuShown(object sender, WebViewContextMenuShownEventArgs e)
494         {
495             Log.Info("WebView", $"------------context menu is shown, -------");
496
497             if (menuPosition != null)
498             {
499                 menuView = new MenuView(e.ContextMenu)
500                 {
501                     BackgroundColor = Color.Cyan,
502                     Position = new Position(menuPosition),
503                     Size = new Size(200, e.ContextMenu.ItemCount * 80),
504                 };
505                 menuView.ClickedEvent += OnMenuViewItemSelected;
506                 GetDefaultWindow().Add(menuView);
507             }
508
509             Log.Info("WebView", $"------------context menu shown, ItemList ItemCount: {e.ContextMenu.ItemCount}-------");
510             if (e.ContextMenu.ItemCount > 0)
511             {
512                 WebContextMenuItem item = e.ContextMenu.GetItemAtIndex(0);
513                 Log.Info("WebView", $"------------context menu shown, Item Tag: {item.Tag}-------");
514                 Log.Info("WebView", $"------------context menu shown, Item Type: {item.Type}-------");
515                 Log.Info("WebView", $"------------context menu shown, Item IsEnabled: {item.IsEnabled}-------");
516                 Log.Info("WebView", $"------------context menu shown, Item LinkUrl: {item.LinkUrl}-------");
517                 Log.Info("WebView", $"------------context menu shown, Item ImageUrl: {item.ImageUrl}-------");
518                 Log.Info("WebView", $"------------context menu shown, Item Title: {item.Title}-------");
519                 if (item.ParentMenu != null)
520                 {
521                     Log.Info("WebView", $"------------context menu shown, ParentMenu item count: {item.ParentMenu.ItemCount}-------");
522                 }
523             }
524             Log.Info("WebView", $"------------context menu shown, ItemCount: {e.ContextMenu.ItemCount}-------");
525             //Log.Info("WebView", $"------------context menu shown, Position: {e.ContextMenu.Position}-------");
526             e.ContextMenu.AppendItem(WebContextMenuItem.ItemTag.NoAction, "test1", true);
527             e.ContextMenu.AppendItem(WebContextMenuItem.ItemTag.NoAction, "test2", "", true);
528             //e.ContextMenu.Hide();
529             if (e.ContextMenu.ItemCount > 0)
530             {
531                 //WebContextMenuItem item = e.ContextMenu.GetItemAtIndex(0);
532                 //e.ContextMenu.SelectItem(item);
533                 //e.ContextMenu.RemoveItem(item);
534             }
535         }
536
537         private void OnContextMenuHidden(object sender, WebViewContextMenuHiddenEventArgs e)
538         {
539             Log.Info("WebView", $"------------context menu is hidden, -------");
540         }
541
542         private void OnConsoleMessageReceived(object sender, WebViewConsoleMessageReceivedEventArgs e)
543         {
544             Log.Info("WebView", $"------------console message received, Source: {e.ConsoleMessage.Source}-------");
545             Log.Info("WebView", $"------------console message received, Line: {e.ConsoleMessage.Line}-------");
546             Log.Info("WebView", $"------------console message received, Level: {e.ConsoleMessage.Level}-------");
547             Log.Info("WebView", $"------------console message received, Text: {e.ConsoleMessage.Text}-------");
548         }
549
550         private void OnCertificateConfirmed(object sender, WebViewCertificateReceivedEventArgs e)
551         {
552             Log.Info("WebView", $"------------ssl certificate confirmed, IsFromMainFrame: {e.Certificate.IsFromMainFrame}-------");
553             Log.Info("WebView", $"------------ssl certificate confirmed, PemData: {e.Certificate.PemData}-------");
554             Log.Info("WebView", $"------------ssl certificate confirmed, PemData: {e.Certificate.IsContextSecure}-------");
555             e.Certificate.Allow(true);
556         }
557
558         private void OnNavigationPolicyDecided(object sender, WebViewPolicyDecidedEventArgs e)
559         {
560             Log.Info("WebView", $"------------response policy decided, Url: {e.ResponsePolicyDecisionMaker.Url}-------");
561             Log.Info("WebView", $"------------response policy decided, Cookie: {e.ResponsePolicyDecisionMaker.Cookie}-------");
562             Log.Info("WebView", $"------------response policy decided, PolicyDecisionType: {e.ResponsePolicyDecisionMaker.PolicyDecisionType}-------");
563             Log.Info("WebView", $"------------response policy decided, ResponseMime: {e.ResponsePolicyDecisionMaker.ResponseMime}-------");
564             Log.Info("WebView", $"------------response policy decided, ResponseStatusCode: {e.ResponsePolicyDecisionMaker.ResponseStatusCode}-------");
565             Log.Info("WebView", $"------------response policy decided, DecisionNavigationType: {e.ResponsePolicyDecisionMaker.DecisionNavigationType}-------");
566             Log.Info("WebView", $"------------response policy decided, Scheme: {e.ResponsePolicyDecisionMaker.Scheme}-------");
567             if (e.ResponsePolicyDecisionMaker.Frame != null)
568             {
569                 Log.Info("WebView", $"------------response policy decided, Frame.IsMainFrame: {e.ResponsePolicyDecisionMaker.Frame.IsMainFrame}-------");
570             }
571             //e.ResponsePolicyDecisionMaker.Ignore();
572             //e.ResponsePolicyDecisionMaker.Suspend();
573             //e.ResponsePolicyDecisionMaker.Use();
574         }
575
576         private void OnResponsePolicyDecided(object sender, WebViewPolicyDecidedEventArgs e)
577         {
578             Log.Info("WebView", $"------------response policy decided, Url: {e.ResponsePolicyDecisionMaker.Url}-------");
579             Log.Info("WebView", $"------------response policy decided, Cookie: {e.ResponsePolicyDecisionMaker.Cookie}-------");
580             Log.Info("WebView", $"------------response policy decided, PolicyDecisionType: {e.ResponsePolicyDecisionMaker.PolicyDecisionType}-------");
581             Log.Info("WebView", $"------------response policy decided, ResponseMime: {e.ResponsePolicyDecisionMaker.ResponseMime}-------");
582             Log.Info("WebView", $"------------response policy decided, ResponseStatusCode: {e.ResponsePolicyDecisionMaker.ResponseStatusCode}-------");
583             Log.Info("WebView", $"------------response policy decided, DecisionNavigationType: {e.ResponsePolicyDecisionMaker.DecisionNavigationType}-------");
584             Log.Info("WebView", $"------------response policy decided, Scheme: {e.ResponsePolicyDecisionMaker.Scheme}-------");
585             if (e.ResponsePolicyDecisionMaker.Frame != null)
586             {
587                 Log.Info("WebView", $"------------response policy decided, Frame.IsMainFrame: {e.ResponsePolicyDecisionMaker.Frame.IsMainFrame}-------");
588             }
589             //e.ResponsePolicyDecisionMaker.Ignore();
590             //e.ResponsePolicyDecisionMaker.Suspend();
591             //e.ResponsePolicyDecisionMaker.Use();
592         }
593
594         private void OnJavaScriptMessageReceived(string message)
595         {
596             Log.Info("WebView", $"------------javascript message handler, message: {message}-------");
597         }
598
599         private void OnVideoPlaying(bool isPlaying)
600         {
601             Log.Info("WebView", $"------------video playing, isPlaying: {isPlaying}-------");
602         }
603
604         private void OnScreenshotAcquired(ImageView image)
605         {
606             Log.Info("WebView", $"------------screen shot acquired-------");
607
608             if (image != null)
609             {
610                 screenshotView = image;
611                 screenshotView.Position = new Position(500, 500);
612                 screenshotView.BackgroundColor = Color.Blue;
613                 GetDefaultWindow().Add(screenshotView);
614                 if (messageTimer.IsRunning())
615                 {
616                     messageTimer.Stop();
617                 }
618                 messageTimer.Start();
619                 Log.Info("WebView", $"------------screen shot would be shown-------");
620             }
621         }
622
623         private void OnHitTestFinished(WebHitTestResult test)
624         {
625             Log.Info("WebView", $"------------hit test finished-------");
626             Log.Info("WebView", $"WebHitTestResult, TestResultContext: {test.TestResultContext}");
627             Log.Info("WebView", $"WebHitTestResult, LinkUrl: {test.LinkUrl}");
628             Log.Info("WebView", $"WebHitTestResult, LinkTitle: {test.LinkTitle}");
629             Log.Info("WebView", $"WebHitTestResult, LinkLabel: {test.LinkLabel}");
630             Log.Info("WebView", $"WebHitTestResult, ImageUrl: {test.ImageUrl}");
631             Log.Info("WebView", $"WebHitTestResult, MediaUrl: {test.MediaUrl}");
632             Log.Info("WebView", $"WebHitTestResult, TagName: {test.TagName}");
633             Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.NodeValue}");
634             if (test.Attributes != null)
635             {
636                 Log.Info("WebView", $"WebHitTestResult, Attributes: {test.Attributes}");
637             }
638             Log.Info("WebView", $"WebHitTestResult, ImageFileNameExtension: {test.ImageFileNameExtension}");
639             ImageView imageView = test.Image;
640             if (imageView != null)
641             {
642                 hitTestImageView = imageView;
643                 hitTestImageView.Position = new Position(1000, 500);
644                 hitTestImageView.BackgroundColor = Color.Blue;
645                 GetDefaultWindow().Add(hitTestImageView);
646                 if (messageTimer.IsRunning())
647                 {
648                     messageTimer.Stop();
649                 }
650                 messageTimer.Start();
651                 Log.Info("WebView", $"WebHitTestResult, Got image view");
652             }
653         }
654
655         private void OnJavaScriptEvaluated(string message)
656         {
657             Log.Info("WebView", $"------------javascript evaluation result: {message}-------");
658         }
659
660         private void OnJavaScriptAlert(string message)
661         {
662             Log.Info("WebView", $"------------javascript alert {message}-------");
663             simpleWebView.JavaScriptAlertReply();
664         }
665
666         private void OnGeolocationPermission(string host, string protocol)
667         {
668             Log.Info("WebView", $"------------geolocation permission, host: {host}, protocol: {protocol}-------");
669         }
670
671         private void OnJavaScriptConfirm(string message)
672         {
673             Log.Info("WebView", $"------------javascript confirm {message}-------");
674             simpleWebView.JavaScriptConfirmReply(true);
675         }
676
677         private void OnJavaScriptPrompt(string message1, string message2)
678         {
679             Log.Info("WebView", $"------------javascript prompt {message1}, {message2}-------");
680             simpleWebView.JavaScriptPromptReply("test");
681         }
682
683         private void OnPasswordDataListAcquired(IList<WebPasswordData> list)
684         {
685             Log.Info("WebView", $"------------password data list, count: {list.Count}-------");
686             string[] passwords = new string[list.Count];
687             for (int i = 0; i < list.Count; i++)
688             {
689                 WebPasswordData data = list[i];
690                 passwords[i] = data.Url;
691                 Log.Info("WebView", $"------------password data, Url: {data.Url}-------");
692                 Log.Info("WebView", $"------------password data, FingerprintUsed: {data.FingerprintUsed}-------");
693             }
694
695             if (list.Count > 0)
696             {
697                 simpleWebView.Context.DeleteFormPasswordDataList(passwords);
698             }
699         }
700
701         private void OnSecurityOriginListAcquired(IList<WebSecurityOrigin> list)
702         {
703             Log.Info("WebView", $"------------security origin, count: {list.Count}-------");
704             for (int i = 0; i < list.Count; i++)
705             {
706                 WebSecurityOrigin origin = list[i];
707                 Log.Info("WebView", $"------------security origin, Host: {origin.Host}-------");
708                 Log.Info("WebView", $"------------security origin, Protocol: {origin.Protocol}-------");
709             }
710
711             if (list.Count > 0)
712             {
713                 WebSecurityOrigin origin = list[0];
714                 simpleWebView.Context.GetWebStorageUsageForOrigin(origin, OnStorageUsageAcquired);
715                 simpleWebView.Context.DeleteApplicationCache(origin);
716                 simpleWebView.Context.DeleteWebDatabase(origin);
717                 simpleWebView.Context.DeleteWebStorage(origin);
718             }
719         }
720
721         private void OnStorageUsageAcquired(ulong usage)
722         {
723             Log.Info("WebView", $"------------storage usage acquired, usage: {usage}-------");
724         }
725
726         private void OnDownloadStarted(string url)
727         {
728             Log.Info("WebView", $"------------download started, url: {url}-------");
729         }
730
731         private bool OnMimeOverridden(string url, string currentMime, out string newMime)
732         {
733             Log.Info("WebView", $"------------mime overridden, url: {url}-------");
734             Log.Info("WebView", $"------------mime overridden, currentMime: {currentMime}-------");
735             newMime = "test";
736             return true;
737         }
738
739         private void OnCookieChanged(object sender, EventArgs e)
740         {
741             Log.Info("WebView", $"------------cookie changed-------");
742         }
743
744         private bool OnWebViewKeyEvent(object source, View.KeyEventArgs args)
745         {
746             bool result = false;
747
748             Log.Info("WebView", $"----web view key is {args.Key.KeyPressedName}, state is {args.Key.State}-------");
749
750             if (args.Key.State == Key.StateType.Up)
751             {
752                 if (args.Key.KeyPressedName == "XF86RaiseChannel")
753                 {
754                     Log.Info("WebView", $"old url is {simpleWebView.Url}.");
755                     if (index != 0)
756                     {
757                         simpleWebView.Url = websites[--index].ToLowerInvariant();
758                     }
759                     else
760                     {
761                         simpleWebView.Url = websites[WEBSITES_COUNT - 1].ToLowerInvariant();
762                     }
763                     result = true;
764                     Log.Info("WebView", $"new url is {simpleWebView.Url}.");
765                 }
766                 else if (args.Key.KeyPressedName == "XF86LowerChannel")
767                 {
768                     Log.Info("WebView", $"old url is {simpleWebView.Url}.");
769                     if (index != WEBSITES_COUNT - 1)
770                     {
771                         simpleWebView.Url = websites[++index].ToLowerInvariant();
772                     }
773                     else
774                     {
775                         simpleWebView.Url = websites[0].ToLowerInvariant();
776                     }
777                     result = true;
778                     Log.Info("WebView", $"new url is {simpleWebView.Url}.");
779                 }
780                 //else if (args.Key.KeyPressedName == "1")
781                 //{
782                 //    Rectangle viewArea = new Rectangle(0, 0, 20, 20);
783                 //    bool succeeded = simpleWebView.GetScreenshotAsynchronously(viewArea, 1.0f, OnScreenshotAcquired);
784                 //    Log.Info("WebView", $"GetScreenshotAsynchronously, {succeeded}");
785
786                 //    succeeded = simpleWebView.HitTestAsynchronously(100, 100, BaseComponents.WebView.HitTestMode.Default, OnHitTestFinished);
787                 //    Log.Info("WebView", $"HitTestAsynchronously, {succeeded}");
788                 //}
789                 else if (args.Key.KeyPressedName == "1")
790                 {
791                     simpleWebView.Context.RegisterHttpRequestInterceptedCallback(OnHttpRequestIntercepted);
792                     simpleWebView.LoadUrl(invalidUrl);
793                     result = true;
794                 }
795                 else if (args.Key.KeyPressedName == "XF86Red")
796                 {
797                     FocusManager.Instance.SetCurrentFocusView(addressBar);
798                     result = true;
799                 }
800                 else if (args.Key.KeyPressedName == "XF86Blue")
801                 {
802                     blueKeyPressedCount++;
803                     if (blueKeyPressedCount % 6 == 0)
804                     {
805                         simpleWebView.Position = new Position(0, ADDRESSBAR_HEIGHT);
806                         simpleWebView.Orientation = new Rotation(new Radian(new Degree(60 * blueKeyPressedCount)), Vector3.ZAxis);
807                         blueKeyPressedCount = 0;
808                     }
809                     else
810                     {
811                         simpleWebView.Orientation = new Rotation(new Radian(new Degree(60 * blueKeyPressedCount)), Vector3.ZAxis);
812                     }
813                     result = true;
814                 }
815                 else if (args.Key.KeyPressedName == "XF86Yellow")
816                 {
817                     yellowKeyPressedCount++;
818                     int wdistance = (SCREEN_WIDTH - MIN_WEBVIEW_WIDTH) / 5;
819                     int hdistance = (SCREEN_HEIGHT - MIN_WEBVIEW_HEIGHT - ADDRESSBAR_HEIGHT) / 5;
820                     simpleWebView.Position = new Position((SCREEN_WIDTH - MIN_WEBVIEW_WIDTH - yellowKeyPressedCount * wdistance) / 2, ADDRESSBAR_HEIGHT);
821                     simpleWebView.Size = new Size(MIN_WEBVIEW_WIDTH + yellowKeyPressedCount * wdistance, MIN_WEBVIEW_HEIGHT + hdistance * yellowKeyPressedCount);
822                     if (yellowKeyPressedCount % 5 == 0)
823                     {
824                         yellowKeyPressedCount = 0;
825                     }
826                     result = true;
827                 }
828                 else if (args.Key.KeyPressedName == "XF86Green")
829                 {
830                     Log.Info("WebView", $"key XF86Green is pressed.");
831
832                     if (greenKeyPressedCount == 0 && simpleWebView.Url.Contains("test1.html"))
833                     {
834                         // webview apis
835                         Log.Info("WebView", $"web page title is {simpleWebView.Title}");
836
837                         //faviconView = simpleWebView.Favicon;
838                         //if (faviconView != null)
839                         //{
840                         //    faviconView.Position = new Position(500, 100);
841                         //    GetDefaultWindow().Add(faviconView);
842                         //    messageTimer.Start();
843                         //}
844
845                         simpleWebView.ContentBackgroundColor = new Color(1.0f, 0.0f, 0.0f, 1.0f);
846                         Log.Info("WebView", $"web page ContentBackgroundColor is {simpleWebView.ContentBackgroundColor}");
847                         simpleWebView.TilesClearedWhenHidden = true;
848                         Log.Info("WebView", $"web page TilesClearedWhenHidden is {simpleWebView.TilesClearedWhenHidden}");
849                         simpleWebView.TileCoverAreaMultiplier = 2.0f;
850                         Log.Info("WebView", $"web page TileCoverAreaMultiplier is {simpleWebView.TileCoverAreaMultiplier}");
851                         simpleWebView.CursorEnabledByClient = true;
852                         Log.Info("WebView", $"web page CursorEnabledByClient is {simpleWebView.CursorEnabledByClient}");
853                         Log.Info("WebView", $"web page SelectedText is {simpleWebView.SelectedText}");
854                         simpleWebView.PageZoomFactor = 2.0f;
855                         Log.Info("WebView", $"web page PageZoomFactor is {simpleWebView.PageZoomFactor}");
856                         simpleWebView.TextZoomFactor = 2.0f;
857                         Log.Info("WebView", $"web page TextZoomFactor is {simpleWebView.TextZoomFactor}");
858                         Log.Info("WebView", $"web page LoadProgressPercentage is {simpleWebView.LoadProgressPercentage}");
859
860                         //simpleWebView.ActivateAccessibility(true);
861                         //simpleWebView.AddCustomHeader("test", "value");
862                         //simpleWebView.AddDynamicCertificatePath("", "");
863                         simpleWebView.AddJavaScriptMessageHandler("", OnJavaScriptMessageReceived);
864                         simpleWebView.CheckVideoPlayingAsynchronously(OnVideoPlaying);
865                         //simpleWebView.ClearAllTilesResources();
866                         //simpleWebView.ClearHistory();
867                         simpleWebView.EvaluateJavaScript("document.body.style.backgroundColor='yellow';");
868                         simpleWebView.EvaluateJavaScript("document.body.innerHTML", OnJavaScriptEvaluated);
869                         Log.Info("WebView", $"web view, ScaleFactor is {simpleWebView.GetScaleFactor()}");
870
871                         //Rectangle viewArea = new Rectangle(0, 0, 20, 20);
872                         //ImageView shotView = simpleWebView.GetScreenshot(viewArea, 1.0f);
873                         //if (shotView != null)
874                         //{
875                         //    shotView.Position = new Position(500, 200);
876                         //    GetDefaultWindow().Add(shotView);
877                         //}
878
879                         simpleWebView.HighlightText("test", BaseComponents.WebView.FindOption.CaseInsensitive, 2);
880                         Log.Info("WebView", $"web view, here");
881                         WebHitTestResult test = null;//simpleWebView.HitTest(100, 100, WebView.HitTestMode.Default);
882                         if (test != null)
883                         {
884                             Log.Info("WebView", $"WebHitTestResult, TestResultContext: {test.TestResultContext}");
885                             Log.Info("WebView", $"WebHitTestResult, LinkUrl: {test.LinkUrl}");
886                             Log.Info("WebView", $"WebHitTestResult, LinkTitle: {test.LinkTitle}");
887                             Log.Info("WebView", $"WebHitTestResult, LinkLabel: {test.LinkLabel}");
888                             Log.Info("WebView", $"WebHitTestResult, ImageUrl: {test.ImageUrl}");
889                             Log.Info("WebView", $"WebHitTestResult, MediaUrl: {test.MediaUrl}");
890                             Log.Info("WebView", $"WebHitTestResult, TagName: {test.TagName}");
891                             Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.NodeValue}");
892                             if (test.Attributes != null)
893                             {
894                                 Log.Info("WebView", $"WebHitTestResult, Attributes: {test.Attributes}");
895                             }
896                             Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.ImageFileNameExtension}");
897                             ImageView imageView = test.Image;
898                             if (imageView != null)
899                             {
900                                 imageView.Position = new Position(500, 500);
901                                 GetDefaultWindow().Add(imageView);
902                             }
903                         }
904
905                         simpleWebView.RegisterGeolocationPermissionCallback(OnGeolocationPermission);
906                         Log.Info("WebView", $"Register javascript alert/confirm/prompt callback.");
907                         simpleWebView.RegisterJavaScriptAlertCallback(OnJavaScriptAlert);
908                         simpleWebView.RegisterJavaScriptConfirmCallback(OnJavaScriptConfirm);
909                         simpleWebView.RegisterJavaScriptPromptCallback(OnJavaScriptPrompt);
910                         //Log.Info("WebView", $"Reload without cache.");
911                         //simpleWebView.ReloadWithoutCache();
912                         //Log.Info("WebView", $"Remove custom header");
913                         //simpleWebView.RemoveCustomHeader("test");
914                         //Log.Info("WebView", $"Suspend");
915                         //simpleWebView.Suspend();
916                         //simpleWebView.SuspendNetworkLoading();
917                         //Log.Info("WebView", $"Resume");
918                         //simpleWebView.Resume();
919                         //simpleWebView.ResumeNetworkLoading();
920                         //Log.Info("WebView", $"load contents");
921                         //simpleWebView.LoadContents();
922                         //simpleWebView.LoadHtmlStringOverrideCurrentEntry();
923                         //simpleWebView.LoadHtmlString("<Html><Head><title>Example</title></Head><Body><b>[This text is Bold......]</b></Body></Html>");
924                         //simpleWebView.ScrollPosition = new Position(0, 200);
925                         //simpleWebView.ScrollBy(0, 50);
926                         //simpleWebView.ScrollEdgeBy(0, 50);
927
928                         //Log.Info("WebView", $"scroll position is ({simpleWebView.ScrollPosition.X}, {simpleWebView.ScrollPosition.Y}).");
929                         //Log.Info("WebView", $"scroll size is ({simpleWebView.ScrollSize.Width}, {simpleWebView.ScrollSize.Height}).");
930                         //Log.Info("WebView", $"content size is ({simpleWebView.ContentSize.Width}, {simpleWebView.ContentSize.Height}).");
931
932                         //simpleWebView.StartInspectorServer(8080);
933                         //simpleWebView.StopInspectorServer();
934                         //simpleWebView.StopLoading();
935
936                         // websettings apis
937                         simpleWebView.Settings.LinkMagnifierEnabled = true;
938                         Log.Info("WebView", $"web settings LinkMagnifierEnabled is {simpleWebView.Settings.LinkMagnifierEnabled}");
939                         simpleWebView.Settings.ViewportMetaTag = true;
940                         Log.Info("WebView", $"web settings ViewportMetaTag is {simpleWebView.Settings.ViewportMetaTag}");
941                         simpleWebView.Settings.DefaultTextEncodingName = "utf-8";
942                         Log.Info("WebView", $"web settings DefaultTextEncodingName is {simpleWebView.Settings.DefaultTextEncodingName}");
943                         simpleWebView.Settings.AutomaticImageLoadingAllowed = true;
944                         Log.Info("WebView", $"web settings AutomaticImageLoadingAllowed is {simpleWebView.Settings.AutomaticImageLoadingAllowed}");
945                         simpleWebView.Settings.ScriptsOpenWindowsAllowed = true;
946                         Log.Info("WebView", $"web settings ScriptsOpenWindowsAllowed is {simpleWebView.Settings.ScriptsOpenWindowsAllowed}");
947                         simpleWebView.Settings.ImePanelEnabled = true;
948                         Log.Info("WebView", $"web settings ImePanelEnabled is {simpleWebView.Settings.ImePanelEnabled}");
949                         simpleWebView.Settings.ClipboardEnabled = true;
950                         Log.Info("WebView", $"web settings ClipboardEnabled is {simpleWebView.Settings.ClipboardEnabled}");
951                         simpleWebView.Settings.ArrowScrollEnabled = true;
952                         Log.Info("WebView", $"web settings ArrowScrollEnabled is {simpleWebView.Settings.ArrowScrollEnabled}");
953                         simpleWebView.Settings.TextAutosizingEnabled = true;
954                         Log.Info("WebView", $"web settings TextAutosizingEnabled is {simpleWebView.Settings.TextAutosizingEnabled}");
955                         simpleWebView.Settings.TextSelectionEnabled = true;
956                         Log.Info("WebView", $"web settings TextSelectionEnabled is {simpleWebView.Settings.TextSelectionEnabled}");
957                         simpleWebView.Settings.FormCandidateDataEnabled = true;
958                         Log.Info("WebView", $"web settings FormCandidateDataEnabled is {simpleWebView.Settings.FormCandidateDataEnabled}");
959                         simpleWebView.Settings.AutofillPasswordFormEnabled = true;
960                         Log.Info("WebView", $"web settings AutofillPasswordFormEnabled is {simpleWebView.Settings.AutofillPasswordFormEnabled}");
961                         simpleWebView.Settings.KeypadWithoutUserActionUsed = true;
962                         Log.Info("WebView", $"web settings KeypadWithoutUserActionUsed is {simpleWebView.Settings.KeypadWithoutUserActionUsed}");
963                         simpleWebView.Settings.ZoomForced = true;
964                         Log.Info("WebView", $"web settings ZoomForced is {simpleWebView.Settings.ZoomForced}");
965                         simpleWebView.Settings.TextZoomEnabled = true;
966                         Log.Info("WebView", $"web settings TextZoomEnabled is {simpleWebView.Settings.TextZoomEnabled}");
967                         simpleWebView.Settings.PluginsEnabled = true;
968                         Log.Info("WebView", $"web settings PluginsEnabled is {simpleWebView.Settings.PluginsEnabled}");
969                         simpleWebView.Settings.AutoFittingEnabled = true;
970                         Log.Info("WebView", $"web settings AutoFittingEnabled is {simpleWebView.Settings.AutoFittingEnabled}");
971                         simpleWebView.Settings.JavaScriptEnabled = true;
972                         Log.Info("WebView", $"web settings JavaScriptEnabled is {simpleWebView.Settings.JavaScriptEnabled}");
973                         simpleWebView.Settings.FileAccessFromExternalUrlAllowed = true;
974                         Log.Info("WebView", $"web settings FileAccessFromExternalUrlAllowed is {simpleWebView.Settings.FileAccessFromExternalUrlAllowed}");
975                         simpleWebView.Settings.ScrollbarThumbFocusNotificationsUsed = true;
976                         Log.Info("WebView", $"web settings ScrollbarThumbFocusNotificationsUsed is {simpleWebView.Settings.ScrollbarThumbFocusNotificationsUsed}");
977                         simpleWebView.Settings.DoNotTrackEnabled = true;
978                         Log.Info("WebView", $"web settings DoNotTrackEnabled is {simpleWebView.Settings.DoNotTrackEnabled}");
979                         simpleWebView.Settings.CacheBuilderEnabled = true;
980                         Log.Info("WebView", $"web settings CacheBuilderEnabled is {simpleWebView.Settings.CacheBuilderEnabled}");
981                         simpleWebView.Settings.WebSecurityEnabled = true;
982                         Log.Info("WebView", $"web settings WebSecurityEnabled is {simpleWebView.Settings.WebSecurityEnabled}");
983                         simpleWebView.Settings.DefaultFontSize = 20;
984                         Log.Info("WebView", $"web settings DefaultFontSize is {simpleWebView.Settings.DefaultFontSize}");
985                         simpleWebView.Settings.SpatialNavigationEnabled = true;
986                         Log.Info("WebView", $"web settings SpatialNavigationEnabled is {simpleWebView.Settings.SpatialNavigationEnabled}");
987                         simpleWebView.Settings.MixedContentsAllowed = true;
988                         Log.Info("WebView", $"web settings MixedContentsAllowed is {simpleWebView.Settings.MixedContentsAllowed}");
989                         simpleWebView.Settings.PrivateBrowsingEnabled = true;
990                         Log.Info("WebView", $"web settings PrivateBrowsingEnabled is {simpleWebView.Settings.PrivateBrowsingEnabled}");
991                         simpleWebView.Settings.EnableExtraFeature("feature", true);
992                         Log.Info("WebView", $"web settings EnableExtraFeature is {simpleWebView.Settings.IsExtraFeatureEnabled("feature")}");
993
994                         // webcontext apis
995                         simpleWebView.Context.AppType = WebContext.ApplicationType.WebBrowser;
996                         Log.Info("WebView", $"web context, AppType: {simpleWebView.Context.AppType}");
997                         simpleWebView.Context.AppVersion = "6.5";
998                         Log.Info("WebView", $"web context, AppVersion: {simpleWebView.Context.AppVersion}");
999                         simpleWebView.Context.AppId = "1.0id";
1000                         Log.Info("WebView", $"web context, AppId: {simpleWebView.Context.AppId}");
1001                         simpleWebView.Context.CacheEnabled = false;
1002                         Log.Info("WebView", $"web context, CacheEnabled: {simpleWebView.Context.CacheEnabled}");
1003                         simpleWebView.Context.CertificateFilePath = "/root/share";
1004                         Log.Info("WebView", $"web context, CertificateFilePath: {simpleWebView.Context.CertificateFilePath}");
1005                         simpleWebView.Context.ProxyUrl = "https://127.0.0.1";
1006                         Log.Info("WebView", $"web context, ProxyUrl: {simpleWebView.Context.ProxyUrl}");
1007                         simpleWebView.Context.CacheModel = WebContext.CacheModelType.DocumentBrowser;
1008                         Log.Info("WebView", $"web context, cache model is {simpleWebView.Context.CacheModel}");
1009                         Log.Info("WebView", $"web context, ProxyBypassRule: {simpleWebView.Context.ProxyBypassRule}");
1010                         simpleWebView.Context.DefaultZoomFactor = 2.0f;
1011                         Log.Info("WebView", $"web context, DefaultZoomFactor: {simpleWebView.Context.DefaultZoomFactor}");
1012                         //simpleWebView.Context.ClearCache();
1013                         //simpleWebView.Context.DeleteAllApplicationCache();
1014                         //simpleWebView.Context.DeleteAllFormCandidateData();
1015                         //simpleWebView.Context.DeleteAllFormPasswordData();
1016                         //simpleWebView.Context.DeleteAllWebDatabase();
1017                         //simpleWebView.Context.DeleteAllWebIndexedDatabase();
1018                         //simpleWebView.Context.DeleteAllWebStorage();
1019                         //simpleWebView.Context.DeleteLocalFileSystem();
1020                         //simpleWebView.Context.FreeUnusedMemory();
1021                         Log.Info("WebView", $"web view, here");
1022                         simpleWebView.Context.GetFormPasswordList(OnPasswordDataListAcquired);
1023                         Log.Info("WebView", $"web view, here");
1024                         simpleWebView.Context.GetWebDatabaseOrigins(OnSecurityOriginListAcquired);
1025                         Log.Info("WebView", $"web view, here");
1026                         simpleWebView.Context.GetWebStorageOrigins(OnSecurityOriginListAcquired);
1027                         Log.Info("WebView", $"web view, here");
1028                         simpleWebView.Context.RegisterDownloadStartedCallback(OnDownloadStarted);
1029                         Log.Info("WebView", $"web view, here");
1030                         string[] mimes = { "txt" };
1031                         simpleWebView.Context.RegisterJsPluginMimeTypes(mimes);
1032                         Log.Info("WebView", $"web view, here");
1033                         simpleWebView.Context.RegisterMimeOverriddenCallback(OnMimeOverridden);
1034                         Log.Info("WebView", $"web view, here");
1035                         string[] schemes = { "test" };
1036                         simpleWebView.Context.RegisterUrlSchemesAsCorsEnabled(schemes);
1037                         Log.Info("WebView", $"web view, here");
1038                         simpleWebView.Context.SetProxyBypassRule("test", "");
1039                         Log.Info("WebView", $"web context, ContextProxy: {simpleWebView.Context.ProxyUrl}");
1040                         simpleWebView.Context.TimeOffset = 8.0f;
1041                         Log.Info("WebView", $"web context, TimeOffset: {simpleWebView.Context.TimeOffset}");
1042                         simpleWebView.Context.SetTimeZoneOffset(2.0f, 3.0f);
1043                         simpleWebView.Context.SetDefaultProxyAuth("user", "password");
1044
1045                         // webcookiemanager apis
1046                         simpleWebView.CookieManager.CookieAcceptPolicy = WebCookieManager.CookieAcceptPolicyType.Never;
1047                         Log.Info("WebView", $"web cookie manager accept policy is {simpleWebView.CookieManager.CookieAcceptPolicy}");
1048                         //simpleWebView.CookieManager.ClearCookies();
1049                         simpleWebView.CookieManager.SetPersistentStorage("/root/share", WebCookieManager.CookiePersistentStorageType.SqlLite);
1050                         simpleWebView.CookieManager.CookieChanged += OnCookieChanged;
1051
1052                         // webbackforwardlist apis
1053                         Log.Info("WebView", $"web back forward list item count is {simpleWebView.BackForwardList.ItemCount}");
1054                         WebBackForwardListItem item = simpleWebView.BackForwardList.GetCurrentItem();
1055                         Log.Info("WebView", $"web back forward list, current item url is {item.Url}");
1056                         Log.Info("WebView", $"web back forward list, current item title is {item.Title}");
1057                         Log.Info("WebView", $"web back forward list, current item original url is {item.OriginalUrl}");
1058                         if (simpleWebView.BackForwardList.ItemCount > 0)
1059                         {
1060                             item = simpleWebView.BackForwardList.GetItemAtIndex(0);
1061                             Log.Info("WebView", $"web back forward list, item0 url is {item.Url}");
1062                             Log.Info("WebView", $"web back forward list, item0 title is {item.Title}");
1063                             Log.Info("WebView", $"web back forward list, item0 original url is {item.OriginalUrl}");
1064                             IList<WebBackForwardListItem> subList = simpleWebView.BackForwardList.GetForwardItems(0);
1065                             Log.Info("WebView", $"web back forward list, forward sub list ItemCount is {subList.Count}");
1066                             subList = simpleWebView.BackForwardList.GetBackwardItems(0);
1067                             Log.Info("WebView", $"web back forward list, backward sub list  ItemCount is {subList.Count}");
1068                         }
1069
1070                         //
1071                         result = true;
1072                         greenKeyPressedCount++;
1073                     }
1074                 }
1075             }
1076
1077             return result;
1078         }
1079
1080         private bool OnAddressBarTouchEvent(object source, View.TouchEventArgs args)
1081         {
1082             FocusManager.Instance.SetCurrentFocusView(addressBar);
1083             return false;
1084         }
1085
1086         private void OnTextEditorFocusGained(object source, EventArgs args)
1087         {
1088             Log.Info("WebView", $"------------address bar focus is gained-------");
1089
1090             addressBar.Text = "";
1091
1092             addressBar.GetInputMethodContext().Activate();
1093             addressBar.GetInputMethodContext().ShowInputPanel();
1094         }
1095
1096         private void OnTextEditorFocusLost(object source, EventArgs args)
1097         {
1098             Log.Info("WebView", $"------------address bar focus lost-------");
1099         }
1100
1101         private bool OnAddressBarKeyEvent(object source, View.KeyEventArgs args)
1102         {
1103             Log.Info("WebView", $"------------address bar key is {args.Key.KeyPressedName}-------");
1104
1105             if (args.Key.State == Key.StateType.Up)
1106             {
1107                 if (args.Key.KeyPressedName == "Select")
1108                 {
1109                     Log.Info("WebView", $"------------address bar text is {addressBar.Text}-------");
1110
1111                     if (addressBar.Text.Length > 0)
1112                     {
1113                         addressBar.GetInputMethodContext().HideInputPanel();
1114                         addressBar.GetInputMethodContext().Deactivate();
1115
1116                         simpleWebView.Url = $"http://{addressBar.Text.ToLowerInvariant()}";
1117
1118                         // set focus to webview.
1119                         FocusManager.Instance.SetCurrentFocusView(simpleWebView);
1120                     }
1121                 }
1122                 else if (args.Key.KeyPressedName == "BackSpace")
1123                 {
1124                     if (addressBar.Text.Length > 0)
1125                     {
1126                         addressBar.Text = addressBar.Text.Substring(0, addressBar.Text.Length - 1);
1127                     }
1128                 }
1129                 else if (args.Key.KeyPressedName == "XF86Red")
1130                 {
1131                     FocusManager.Instance.SetCurrentFocusView(simpleWebView);
1132                 }
1133             }
1134
1135             return true;
1136         }
1137
1138         private void Instance_KeyEvent(object sender, Window.KeyEventArgs args)
1139         {
1140             if (args.Key.State == Key.StateType.Up)
1141             {
1142                 Log.Info("WebView", $"window key is {args.Key.KeyPressedName}.");
1143
1144                 if (args.Key.KeyPressedName == "XF86Exit")
1145                 {
1146                     if (simpleWebView != null)
1147                     {
1148                         GetDefaultWindow().Remove(simpleWebView);
1149                         simpleWebView.Dispose();
1150                         simpleWebView = null;
1151                         Log.Info("WebView", $"WebView is disposed..............");
1152                     }
1153                 }
1154             }
1155         }
1156
1157         [STAThread]
1158         static void Main(string[] args)
1159         {
1160             startTime = DateTime.Now.Ticks;
1161             Log.Info("WebView", $"------------web view start time: {startTime}-------");
1162             new SimpleWebViewApplication().Run(args);
1163         }
1164     }
1165 }