2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 using System.Collections.Generic;
19 using Tizen.NUI.BaseComponents;
20 using Tizen.NUI.Components;
22 namespace Tizen.NUI.WebViewTest
24 internal class MenuView : View
26 private WebContextMenu contextMenu;
27 private Button[] buttons;
29 public event EventHandler<ItemClickedEventArgs> ClickedEvent;
31 public class ItemClickedEventArgs : EventArgs
33 public uint CurrentIndex;
36 internal MenuView(WebContextMenu menu)
40 Layout = new LinearLayout()
42 LinearOrientation = LinearLayout.Orientation.Vertical,
43 LinearAlignment = LinearLayout.Alignment.Center
46 buttons = new Button[menu.ItemCount];
48 for (uint i = 0; i < menu.ItemCount; i++)
50 WebContextMenuItem item = menu.GetItemAtIndex(i);
51 buttons[i] = new Button()
53 Size = new Size(200, 80),
55 TextColor = Color.Black,
58 buttons[i].TouchEvent += OnMenuItemTouched;
63 private bool OnMenuItemTouched(object s, TouchEventArgs e)
66 for (; i < buttons.Length; i++)
68 if (buttons[i] == (Button)s)
70 Log.Info("WebView", $"found button {i} is selected.");
75 Log.Info("WebView", $"button {i} is selected.");
77 //WebContextMenuItem item = contextMenu.ItemList.GetItemAtIndex(i);
80 // contextMenu.SelectItem(item);
81 // contextMenu.Hide();
84 ItemClickedEventArgs args = new ItemClickedEventArgs();
85 args.CurrentIndex = i;
86 ClickedEvent?.Invoke(this, args);
88 Log.Info("WebView", $"button {i} is selected.");
93 internal void HideMenu()
99 public class SimpleWebViewApplication : NUIApplication
101 private BaseComponents.WebView simpleWebView = null;
102 private TextField addressBar = null;
103 private Button backButton = null;
104 private Button forwardButton = null;
105 private Button refreshButton = null;
107 private int index = 0;
108 private const int WEBSITES_COUNT = 2;
109 private string[] websites =
111 "https://terms.account.samsung.com/contents/legal/kor/kor/customizedservicecontent.html",
112 "https://www.youtube.com"
115 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";
117 private const int ADDRESSBAR_HEIGHT = 100;
119 private const int SCREEN_WIDTH = 1920;
120 private const int SCREEN_HEIGHT = 1080;
122 private const int MIN_WEBVIEW_WIDTH = 1000;
123 private const int MIN_WEBVIEW_HEIGHT = 600;
125 private const int WEBVIEW_WIDTH = SCREEN_WIDTH;
126 private const int WEBVIEW_HEIGHT = SCREEN_HEIGHT - ADDRESSBAR_HEIGHT;
128 private Vector2 menuPosition;
129 private MenuView menuView;
131 private int blueKeyPressedCount = 0;
132 private int yellowKeyPressedCount = 0;
133 private int redKeyPressedCount = 0;
135 private static long startTime = 0;
137 private Timer messageTimer = null;
138 private ImageView faviconView = null;
139 private ImageView screenshotView = null;
140 private ImageView hitTestImageView = null;
142 private static string[] runtimeArgs = { "Tizen.NUI.WebViewTest", "--enable-dali-window", "--enable-spatial-navigation" };
144 protected override void OnCreate()
148 GetDefaultWindow().BackgroundColor = new Color((float)189 / 255, (float)179 / 255, (float)204 / 255, 1.0f);
150 backButton = new Button()
152 Position = new Position(0, 0),
153 Size = new Size(100, 100),
155 TextColor = Color.Black,
158 backButton.TouchEvent += OnBackButtonTouchEvent;
159 GetDefaultWindow().Add(backButton);
161 forwardButton = new Button()
163 Position = new Position(100, 0),
164 Size = new Size(100, 100),
166 TextColor = Color.Black,
169 forwardButton.TouchEvent += OnForwardButtonTouchEvent;
170 GetDefaultWindow().Add(forwardButton);
172 refreshButton = new Button()
174 Position = new Position(200, 0),
175 Size = new Size(100, 100),
177 TextColor = Color.Black,
180 refreshButton.TouchEvent += OnRefreshButtonTouchEvent;
181 GetDefaultWindow().Add(refreshButton);
183 addressBar = new TextField()
185 Position = new Position(300, 0),
186 BackgroundColor = Color.White,
187 Size = new Size(SCREEN_WIDTH - 300, ADDRESSBAR_HEIGHT),
188 EnableGrabHandlePopup = false,
189 EnableGrabHandle = false,
190 EnableSelection = true,
192 PlaceholderText = "Please input url here like Www.baidu.com.",
194 addressBar.FocusGained += OnTextEditorFocusGained;
195 addressBar.FocusLost += OnTextEditorFocusLost;
196 addressBar.KeyEvent += OnAddressBarKeyEvent;
197 addressBar.TouchEvent += OnAddressBarTouchEvent;
198 GetDefaultWindow().Add(addressBar);
200 Log.Info("WebView", $"args count is {runtimeArgs.Length}");
201 for (int i = 0; i < runtimeArgs.Length; i++)
203 Log.Info("WebView", $"arg {i} is {runtimeArgs[i]}");
206 simpleWebView = new BaseComponents.WebView(runtimeArgs)
208 Position = new Position(0, ADDRESSBAR_HEIGHT),
209 Size = new Size(WEBVIEW_WIDTH, WEBVIEW_HEIGHT),
210 UserAgent = USER_AGENT,
212 VideoHoleEnabled = true,
214 simpleWebView.FocusGained += OnWebViewFocusGained;
215 simpleWebView.FocusLost += OnWebViewFocusLost;
216 simpleWebView.KeyEvent += OnWebViewKeyEvent;
217 simpleWebView.TouchEvent += OnWebViewTouchEvent;
218 simpleWebView.SslCertificateChanged += OnSslCertificateChanged;
219 //simpleWebView.HttpAuthRequested += OnHttpAuthRequested;
220 simpleWebView.PageLoadStarted += OnPageLoadStarted;
221 simpleWebView.PageLoading += OnPageLoading;
222 simpleWebView.PageLoadFinished += OnPageLoadFinished;
223 simpleWebView.PageLoadError += OnPageLoadError;
224 simpleWebView.ContextMenuShown += OnContextMenuShown;
225 simpleWebView.ContextMenuHidden += OnContextMenuHidden;
226 simpleWebView.ScrollEdgeReached += OnScrollEdgeReached;
227 simpleWebView.UrlChanged += OnUrlChanged;
228 simpleWebView.FormRepostPolicyDecided += OnFormRepostPolicyDecided;
229 //simpleWebView.FrameRendered += OnFrameRendered;
230 simpleWebView.ConsoleMessageReceived += OnConsoleMessageReceived;
231 simpleWebView.CertificateConfirmed += OnCertificateConfirmed;
232 simpleWebView.ResponsePolicyDecided += OnResponsePolicyDecided;
233 GetDefaultWindow().Add(simpleWebView);
235 GetDefaultWindow().KeyEvent += Instance_KeyEvent;
236 simpleWebView.LoadUrl(websites[index]);
237 //simpleWebView.LoadHtmlString("<Html><Head><title>Example</title></Head><Body><b>[This text is Bold......]</b></Body></Html>");
238 FocusManager.Instance.SetCurrentFocusView(simpleWebView);
240 messageTimer = new Timer(10000);
241 messageTimer.Tick += OnTick;
244 protected override void OnTerminate()
246 if (menuView != null)
248 GetDefaultWindow().Remove(menuView);
250 GetDefaultWindow().Remove(backButton);
251 GetDefaultWindow().Remove(forwardButton);
252 GetDefaultWindow().Remove(refreshButton);
253 GetDefaultWindow().Remove(addressBar);
255 if (screenshotView != null)
257 GetDefaultWindow().Remove(screenshotView);
260 messageTimer.Tick -= OnTick;
261 messageTimer.Dispose();
267 private bool OnBackButtonTouchEvent(object sender, View.TouchEventArgs e)
269 if (simpleWebView.CanGoBack())
271 simpleWebView.GoBack();
276 private bool OnForwardButtonTouchEvent(object sender, View.TouchEventArgs e)
278 if (simpleWebView.CanGoForward())
280 simpleWebView.GoForward();
285 private bool OnRefreshButtonTouchEvent(object sender, View.TouchEventArgs e)
287 simpleWebView.Reload();
291 private bool OnTick(object sender, EventArgs e)
293 Log.Info("WebView", $"------------timer tick-------");
295 if (faviconView != null)
297 GetDefaultWindow().Remove(faviconView);
298 faviconView.Dispose();
302 if (screenshotView != null)
304 Log.Info("WebView", $"------------remove screen shot-------");
305 GetDefaultWindow().Remove(screenshotView);
306 screenshotView.Dispose();
307 screenshotView = null;
311 Log.Info("WebView", $"------------screen shot is null-------");
314 if (hitTestImageView != null)
316 GetDefaultWindow().Remove(hitTestImageView);
317 hitTestImageView.Dispose();
318 hitTestImageView = null;
324 private bool OnWebViewTouchEvent(object source, View.TouchEventArgs args)
326 if (!simpleWebView.HasFocus())
328 FocusManager.Instance.SetCurrentFocusView(simpleWebView);
331 //if (args.Touch.GetState(0) == PointStateType.Down && args.Touch.GetMouseButton(0) == MouseButton.Secondary)
333 // if (menuView == null && menuPosition == null)
335 // menuPosition = args.Touch.GetScreenPosition(0);
338 //else if(args.Touch.GetState(0) == PointStateType.Down && args.Touch.GetMouseButton(0) == MouseButton.Primary)
340 // if (menuView != null)
342 // menuView.HideMenu();
343 // GetDefaultWindow().Remove(menuView);
345 // menuPosition = null;
351 private void OnMenuViewItemSelected(object source, MenuView.ItemClickedEventArgs e)
353 Log.Info("WebView", $"------------menu item is selected-------");
354 GetDefaultWindow().Remove(menuView);
358 private void OnWebViewFocusGained(object source, EventArgs args)
360 Log.Info("WebView", $"------------web view focus is gained-------");
363 private void OnWebViewFocusLost(object source, EventArgs args)
365 Log.Info("WebView", $"------------web view focus is lost-------");
368 private void OnHttpAuthRequested(object sender, WebViewHttpAuthRequestedEventArgs e)
370 Log.Info("WebView", $"------------http auth requested, Realm: {e.HttpAuthHandler.Realm}-------");
371 e.HttpAuthHandler.CancelCredential();
372 e.HttpAuthHandler.Suspend();
373 e.HttpAuthHandler.UseCredential("", "");
376 private void OnHttpRequestIntercepted(WebHttpRequestInterceptor interceptor)
378 Log.Info("WebView", $"------------http request intercepted, Url: {interceptor.Url}-------");
380 interceptor.Ignore();
382 Log.Info("WebView", $"------------http request intercepted-------");
385 private void OnSslCertificateChanged(object sender, WebViewCertificateReceivedEventArgs e)
387 Log.Info("WebView", $"------------ssl certificate changed, IsFromMainFrame: {e.Certificate.IsFromMainFrame}-------");
388 Log.Info("WebView", $"------------ssl certificate changed, PemData: {e.Certificate.PemData}-------");
389 Log.Info("WebView", $"------------ssl certificate changed, PemData: {e.Certificate.IsContextSecure}-------");
392 private void OnPageLoadStarted(object sender, WebViewPageLoadEventArgs e)
394 Log.Info("WebView", $"------------web view start to load time: {DateTime.Now.Ticks - startTime}-------");
397 private void OnPageLoading(object sender, WebViewPageLoadEventArgs e)
399 Log.Info("WebView", $"------------web view is loading-------");
402 private void OnPageLoadFinished(object sender, WebViewPageLoadEventArgs e)
404 Log.Info("WebView", $"------------web view finishes loading-------");
406 if (simpleWebView.CanGoBack())
408 backButton.IsEnabled = true;
412 backButton.IsEnabled = false;
415 if (simpleWebView.CanGoForward())
417 forwardButton.IsEnabled = true;
421 forwardButton.IsEnabled = false;
425 private void OnPageLoadError(object sender, WebViewPageLoadErrorEventArgs e)
427 Log.Info("WebView", $"------------web view load error, Url: {e.PageLoadError.Url}-------");
428 Log.Info("WebView", $"------------web view load error, Code: {e.PageLoadError.Code}-------");
429 Log.Info("WebView", $"------------web view load error, Description: {e.PageLoadError.Description}-------");
430 Log.Info("WebView", $"------------web view load error, Type: {e.PageLoadError.Type}-------");
433 private void OnScrollEdgeReached(object sender, WebViewScrollEdgeReachedEventArgs e)
435 Log.Info("WebView", $"------------scroll edge reached, ScrollEdge: {e.ScrollEdge}-------");
438 private void OnUrlChanged(object sender, WebViewUrlChangedEventArgs e)
440 Log.Info("WebView", $"------------url changed, NewPageUrl: {e.NewPageUrl}-------");
443 private void OnFormRepostPolicyDecided(object sender, WebViewFormRepostPolicyDecidedEventArgs e)
445 Log.Info("WebView", $"------------form repost policy decided-------");
446 e.FormRepostPolicyDecisionMaker.Reply(true);
449 private void OnFrameRendered(object sender, EventArgs e)
451 Log.Info("WebView", $"------------frame rendered-------");
454 private void OnContextMenuShown(object sender, WebViewContextMenuShownEventArgs e)
456 Log.Info("WebView", $"------------context menu is shown, -------");
458 if (menuPosition != null)
460 menuView = new MenuView(e.ContextMenu)
462 BackgroundColor = Color.Cyan,
463 Position = new Position(menuPosition),
464 Size = new Size(200, e.ContextMenu.ItemCount * 80),
466 menuView.ClickedEvent += OnMenuViewItemSelected;
467 GetDefaultWindow().Add(menuView);
470 Log.Info("WebView", $"------------context menu shown, ItemList ItemCount: {e.ContextMenu.ItemCount}-------");
471 if (e.ContextMenu.ItemCount > 0)
473 WebContextMenuItem item = e.ContextMenu.GetItemAtIndex(0);
474 Log.Info("WebView", $"------------context menu shown, Item Tag: {item.Tag}-------");
475 Log.Info("WebView", $"------------context menu shown, Item Type: {item.Type}-------");
476 Log.Info("WebView", $"------------context menu shown, Item IsEnabled: {item.IsEnabled}-------");
477 Log.Info("WebView", $"------------context menu shown, Item LinkUrl: {item.LinkUrl}-------");
478 Log.Info("WebView", $"------------context menu shown, Item ImageUrl: {item.ImageUrl}-------");
479 Log.Info("WebView", $"------------context menu shown, Item Title: {item.Title}-------");
480 if (item.ParentMenu != null)
482 Log.Info("WebView", $"------------context menu shown, ParentMenu item count: {item.ParentMenu.ItemCount}-------");
485 Log.Info("WebView", $"------------context menu shown, ItemCount: {e.ContextMenu.ItemCount}-------");
486 //Log.Info("WebView", $"------------context menu shown, Position: {e.ContextMenu.Position}-------");
487 e.ContextMenu.AppendItem(WebContextMenuItem.ItemTag.NoAction, "test1", true);
488 e.ContextMenu.AppendItem(WebContextMenuItem.ItemTag.NoAction, "test2", "", true);
489 //e.ContextMenu.Hide();
490 if (e.ContextMenu.ItemCount > 0)
492 //WebContextMenuItem item = e.ContextMenu.GetItemAtIndex(0);
493 //e.ContextMenu.SelectItem(item);
494 //e.ContextMenu.RemoveItem(item);
498 private void OnContextMenuHidden(object sender, WebViewContextMenuHiddenEventArgs e)
500 Log.Info("WebView", $"------------context menu is hidden, -------");
503 private void OnConsoleMessageReceived(object sender, WebViewConsoleMessageReceivedEventArgs e)
505 Log.Info("WebView", $"------------console message received, Source: {e.ConsoleMessage.Source}-------");
506 Log.Info("WebView", $"------------console message received, Line: {e.ConsoleMessage.Line}-------");
507 Log.Info("WebView", $"------------console message received, Level: {e.ConsoleMessage.Level}-------");
508 Log.Info("WebView", $"------------console message received, Text: {e.ConsoleMessage.Text}-------");
511 private void OnCertificateConfirmed(object sender, WebViewCertificateReceivedEventArgs e)
513 Log.Info("WebView", $"------------ssl certificate confirmed, IsFromMainFrame: {e.Certificate.IsFromMainFrame}-------");
514 Log.Info("WebView", $"------------ssl certificate confirmed, PemData: {e.Certificate.PemData}-------");
515 Log.Info("WebView", $"------------ssl certificate confirmed, PemData: {e.Certificate.IsContextSecure}-------");
516 e.Certificate.Allow(true);
519 private void OnResponsePolicyDecided(object sender, WebViewResponsePolicyDecidedEventArgs e)
521 Log.Info("WebView", $"------------response policy decided, Url: {e.ResponsePolicyDecisionMaker.Url}-------");
522 Log.Info("WebView", $"------------response policy decided, Cookie: {e.ResponsePolicyDecisionMaker.Cookie}-------");
523 Log.Info("WebView", $"------------response policy decided, PolicyDecisionType: {e.ResponsePolicyDecisionMaker.PolicyDecisionType}-------");
524 Log.Info("WebView", $"------------response policy decided, ResponseMime: {e.ResponsePolicyDecisionMaker.ResponseMime}-------");
525 Log.Info("WebView", $"------------response policy decided, ResponseStatusCode: {e.ResponsePolicyDecisionMaker.ResponseStatusCode}-------");
526 Log.Info("WebView", $"------------response policy decided, DecisionNavigationType: {e.ResponsePolicyDecisionMaker.DecisionNavigationType}-------");
527 Log.Info("WebView", $"------------response policy decided, Scheme: {e.ResponsePolicyDecisionMaker.Scheme}-------");
528 if (e.ResponsePolicyDecisionMaker.Frame != null)
530 Log.Info("WebView", $"------------response policy decided, Frame.IsMainFrame: {e.ResponsePolicyDecisionMaker.Frame.IsMainFrame}-------");
532 //e.ResponsePolicyDecisionMaker.Ignore();
533 //e.ResponsePolicyDecisionMaker.Suspend();
534 //e.ResponsePolicyDecisionMaker.Use();
537 private void OnJavaScriptMessageReceived(string message)
539 Log.Info("WebView", $"------------javascript message handler, message: {message}-------");
542 private void OnVideoPlaying(bool isPlaying)
544 Log.Info("WebView", $"------------video playing, isPlaying: {isPlaying}-------");
547 private void OnScreenshotAcquired(ImageView image)
549 Log.Info("WebView", $"------------screen shot acquired-------");
553 screenshotView = image;
554 screenshotView.Position = new Position(500, 500);
555 screenshotView.BackgroundColor = Color.Blue;
556 GetDefaultWindow().Add(screenshotView);
557 if (messageTimer.IsRunning())
561 messageTimer.Start();
562 Log.Info("WebView", $"------------screen shot would be shown-------");
566 private void OnHitTestFinished(WebHitTestResult test)
568 Log.Info("WebView", $"------------hit test finished-------");
569 Log.Info("WebView", $"WebHitTestResult, TestResultContext: {test.TestResultContext}");
570 Log.Info("WebView", $"WebHitTestResult, LinkUrl: {test.LinkUrl}");
571 Log.Info("WebView", $"WebHitTestResult, LinkTitle: {test.LinkTitle}");
572 Log.Info("WebView", $"WebHitTestResult, LinkLabel: {test.LinkLabel}");
573 Log.Info("WebView", $"WebHitTestResult, ImageUrl: {test.ImageUrl}");
574 Log.Info("WebView", $"WebHitTestResult, MediaUrl: {test.MediaUrl}");
575 Log.Info("WebView", $"WebHitTestResult, TagName: {test.TagName}");
576 Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.NodeValue}");
577 if (test.Attributes != null)
579 Log.Info("WebView", $"WebHitTestResult, Attributes: {test.Attributes}");
581 Log.Info("WebView", $"WebHitTestResult, ImageFileNameExtension: {test.ImageFileNameExtension}");
582 ImageView imageView = test.Image;
583 if (imageView != null)
585 hitTestImageView = imageView;
586 hitTestImageView.Position = new Position(1000, 500);
587 hitTestImageView.BackgroundColor = Color.Blue;
588 GetDefaultWindow().Add(hitTestImageView);
589 if (messageTimer.IsRunning())
593 messageTimer.Start();
594 Log.Info("WebView", $"WebHitTestResult, Got image view");
598 private void OnJavaScriptAlert(string message)
600 Log.Info("WebView", $"------------javascript alert {message}-------");
601 simpleWebView.JavaScriptAlertReply();
604 private void OnGeolocationPermission(string host, string protocol)
606 Log.Info("WebView", $"------------geolocation permission, host: {host}, protocol: {protocol}-------");
609 private void OnJavaScriptConfirm(string message)
611 Log.Info("WebView", $"------------javascript confirm {message}-------");
612 simpleWebView.JavaScriptConfirmReply(true);
615 private void OnJavaScriptPrompt(string message1, string message2)
617 Log.Info("WebView", $"------------javascript prompt {message1}, {message2}-------");
618 simpleWebView.JavaScriptPromptReply("test");
621 private void OnPasswordDataListAcquired(IList<WebPasswordData> list)
623 Log.Info("WebView", $"------------password data list, count: {list.Count}-------");
624 string[] passwords = new string[list.Count];
625 for (int i = 0; i < list.Count; i++)
627 WebPasswordData data = list[i];
628 passwords[i] = data.Url;
629 Log.Info("WebView", $"------------password data, Url: {data.Url}-------");
630 Log.Info("WebView", $"------------password data, FingerprintUsed: {data.FingerprintUsed}-------");
635 simpleWebView.Context.DeleteFormPasswordDataList(passwords);
639 private void OnSecurityOriginListAcquired(IList<WebSecurityOrigin> list)
641 Log.Info("WebView", $"------------security origin, count: {list.Count}-------");
642 for (int i = 0; i < list.Count; i++)
644 WebSecurityOrigin origin = list[i];
645 Log.Info("WebView", $"------------security origin, Host: {origin.Host}-------");
646 Log.Info("WebView", $"------------security origin, Protocol: {origin.Protocol}-------");
651 WebSecurityOrigin origin = list[0];
652 simpleWebView.Context.GetWebStorageUsageForOrigin(origin, OnStorageUsageAcquired);
653 simpleWebView.Context.DeleteApplicationCache(origin);
654 simpleWebView.Context.DeleteWebDatabase(origin);
655 simpleWebView.Context.DeleteWebStorage(origin);
659 private void OnStorageUsageAcquired(ulong usage)
661 Log.Info("WebView", $"------------storage usage acquired, usage: {usage}-------");
664 private void OnDownloadStarted(string url)
666 Log.Info("WebView", $"------------download started, url: {url}-------");
669 private bool OnMimeOverridden(string url, string currentMime, string newMime)
671 Log.Info("WebView", $"------------mime overridden, url: {url}-------");
672 Log.Info("WebView", $"------------mime overridden, currentMime: {currentMime}-------");
677 private void OnCookieChanged(object sender, EventArgs e)
679 Log.Info("WebView", $"------------cookie changed-------");
682 private bool OnWebViewKeyEvent(object source, View.KeyEventArgs args)
686 Log.Info("WebView", $"----web view key is {args.Key.KeyPressedName}, state is {args.Key.State}-------");
688 if (args.Key.State == Key.StateType.Up)
690 if (args.Key.KeyPressedName == "XF86RaiseChannel")
692 Log.Info("WebView", $"old url is {simpleWebView.Url}.");
695 simpleWebView.Url = websites[--index].ToLowerInvariant();
699 simpleWebView.Url = websites[WEBSITES_COUNT - 1].ToLowerInvariant();
702 Log.Info("WebView", $"new url is {simpleWebView.Url}.");
704 else if (args.Key.KeyPressedName == "XF86LowerChannel")
706 Log.Info("WebView", $"old url is {simpleWebView.Url}.");
707 if (index != WEBSITES_COUNT - 1)
709 simpleWebView.Url = websites[++index].ToLowerInvariant();
713 simpleWebView.Url = websites[0].ToLowerInvariant();
716 Log.Info("WebView", $"new url is {simpleWebView.Url}.");
718 //else if (args.Key.KeyPressedName == "1")
720 // Rectangle viewArea = new Rectangle(0, 0, 20, 20);
721 // bool succeeded = simpleWebView.GetScreenshotAsynchronously(viewArea, 1.0f, OnScreenshotAcquired);
722 // Log.Info("WebView", $"GetScreenshotAsynchronously, {succeeded}");
724 // succeeded = simpleWebView.HitTestAsynchronously(100, 100, BaseComponents.WebView.HitTestMode.Default, OnHitTestFinished);
725 // Log.Info("WebView", $"HitTestAsynchronously, {succeeded}");
727 else if (args.Key.KeyPressedName == "XF86Red")
729 if (redKeyPressedCount % 2 == 0)
731 simpleWebView.Context.RegisterHttpRequestInterceptedCallback(OnHttpRequestIntercepted);
732 redKeyPressedCount = 0;
736 simpleWebView.Context.RegisterHttpRequestInterceptedCallback(null);
738 redKeyPressedCount++;
739 FocusManager.Instance.SetCurrentFocusView(addressBar);
742 else if (args.Key.KeyPressedName == "XF86Blue")
744 blueKeyPressedCount++;
745 if (blueKeyPressedCount % 6 == 0)
747 simpleWebView.Position = new Position(0, ADDRESSBAR_HEIGHT);
748 simpleWebView.Orientation = new Rotation(new Radian(new Degree(60 * blueKeyPressedCount)), Vector3.ZAxis);
749 blueKeyPressedCount = 0;
753 simpleWebView.Orientation = new Rotation(new Radian(new Degree(60 * blueKeyPressedCount)), Vector3.ZAxis);
757 else if (args.Key.KeyPressedName == "XF86Yellow")
759 yellowKeyPressedCount++;
760 int wdistance = (SCREEN_WIDTH - MIN_WEBVIEW_WIDTH) / 5;
761 int hdistance = (SCREEN_HEIGHT - MIN_WEBVIEW_HEIGHT - ADDRESSBAR_HEIGHT) / 5;
762 simpleWebView.Position = new Position((SCREEN_WIDTH - MIN_WEBVIEW_WIDTH - yellowKeyPressedCount * wdistance) / 2, ADDRESSBAR_HEIGHT);
763 simpleWebView.Size = new Size(MIN_WEBVIEW_WIDTH + yellowKeyPressedCount * wdistance, MIN_WEBVIEW_HEIGHT + hdistance * yellowKeyPressedCount);
764 if (yellowKeyPressedCount % 5 == 0)
766 yellowKeyPressedCount = 0;
770 else if (args.Key.KeyPressedName == "XF86Green")
772 Log.Info("WebView", $"key XF86Green is pressed.");
774 //greenKeyPressedCount++;
775 if (simpleWebView.Url.Contains("account.samsung"))
778 Log.Info("WebView", $"web page title is {simpleWebView.Title}");
780 //faviconView = simpleWebView.Favicon;
781 //if (faviconView != null)
783 // faviconView.Position = new Position(500, 100);
784 // GetDefaultWindow().Add(faviconView);
785 // messageTimer.Start();
788 simpleWebView.ContentBackgroundColor = new Color(1.0f, 0.0f, 0.0f, 1.0f);
789 Log.Info("WebView", $"web page ContentBackgroundColor is {simpleWebView.ContentBackgroundColor}");
790 simpleWebView.TilesClearedWhenHidden = true;
791 Log.Info("WebView", $"web page TilesClearedWhenHidden is {simpleWebView.TilesClearedWhenHidden}");
792 simpleWebView.TileCoverAreaMultiplier = 2.0f;
793 Log.Info("WebView", $"web page TileCoverAreaMultiplier is {simpleWebView.TileCoverAreaMultiplier}");
794 simpleWebView.CursorEnabledByClient = true;
795 Log.Info("WebView", $"web page CursorEnabledByClient is {simpleWebView.CursorEnabledByClient}");
796 Log.Info("WebView", $"web page SelectedText is {simpleWebView.SelectedText}");
797 simpleWebView.PageZoomFactor = 2.0f;
798 Log.Info("WebView", $"web page PageZoomFactor is {simpleWebView.PageZoomFactor}");
799 simpleWebView.TextZoomFactor = 2.0f;
800 Log.Info("WebView", $"web page TextZoomFactor is {simpleWebView.TextZoomFactor}");
801 Log.Info("WebView", $"web page LoadProgressPercentage is {simpleWebView.LoadProgressPercentage}");
803 //simpleWebView.ActivateAccessibility(true);
804 //simpleWebView.AddCustomHeader("test", "value");
805 //simpleWebView.AddDynamicCertificatePath("", "");
806 simpleWebView.AddJavaScriptMessageHandler("", OnJavaScriptMessageReceived);
807 simpleWebView.CheckVideoPlayingAsynchronously(OnVideoPlaying);
808 //simpleWebView.ClearAllTilesResources();
809 //simpleWebView.ClearHistory();
810 simpleWebView.EvaluateJavaScript("document.body.style.backgroundColor='yellow';");
811 Log.Info("WebView", $"web view, ScaleFactor is {simpleWebView.GetScaleFactor()}");
813 //Rectangle viewArea = new Rectangle(0, 0, 20, 20);
814 //ImageView shotView = simpleWebView.GetScreenshot(viewArea, 1.0f);
815 //if (shotView != null)
817 // shotView.Position = new Position(500, 200);
818 // GetDefaultWindow().Add(shotView);
821 simpleWebView.HighlightText("test", BaseComponents.WebView.FindOption.CaseInsensitive, 2);
822 Log.Info("WebView", $"web view, here");
823 WebHitTestResult test = null;//simpleWebView.HitTest(100, 100, WebView.HitTestMode.Default);
826 Log.Info("WebView", $"WebHitTestResult, TestResultContext: {test.TestResultContext}");
827 Log.Info("WebView", $"WebHitTestResult, LinkUrl: {test.LinkUrl}");
828 Log.Info("WebView", $"WebHitTestResult, LinkTitle: {test.LinkTitle}");
829 Log.Info("WebView", $"WebHitTestResult, LinkLabel: {test.LinkLabel}");
830 Log.Info("WebView", $"WebHitTestResult, ImageUrl: {test.ImageUrl}");
831 Log.Info("WebView", $"WebHitTestResult, MediaUrl: {test.MediaUrl}");
832 Log.Info("WebView", $"WebHitTestResult, TagName: {test.TagName}");
833 Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.NodeValue}");
834 if (test.Attributes != null)
836 Log.Info("WebView", $"WebHitTestResult, Attributes: {test.Attributes}");
838 Log.Info("WebView", $"WebHitTestResult, NodeValue: {test.ImageFileNameExtension}");
839 ImageView imageView = test.Image;
840 if (imageView != null)
842 imageView.Position = new Position(500, 500);
843 GetDefaultWindow().Add(imageView);
847 simpleWebView.RegisterGeolocationPermissionCallback(OnGeolocationPermission);
848 Log.Info("WebView", $"Register javascript alert/confirm/prompt callback.");
849 simpleWebView.RegisterJavaScriptAlertCallback(OnJavaScriptAlert);
850 simpleWebView.RegisterJavaScriptConfirmCallback(OnJavaScriptConfirm);
851 simpleWebView.RegisterJavaScriptPromptCallback(OnJavaScriptPrompt);
852 //Log.Info("WebView", $"Reload without cache.");
853 //simpleWebView.ReloadWithoutCache();
854 //Log.Info("WebView", $"Remove custom header");
855 //simpleWebView.RemoveCustomHeader("test");
856 //Log.Info("WebView", $"Suspend");
857 //simpleWebView.Suspend();
858 //simpleWebView.SuspendNetworkLoading();
859 //Log.Info("WebView", $"Resume");
860 //simpleWebView.Resume();
861 //simpleWebView.ResumeNetworkLoading();
862 //Log.Info("WebView", $"load contents");
863 //simpleWebView.LoadContents();
864 //simpleWebView.LoadHtmlStringOverrideCurrentEntry();
865 //simpleWebView.LoadHtmlString("<Html><Head><title>Example</title></Head><Body><b>[This text is Bold......]</b></Body></Html>");
866 //simpleWebView.ScrollPosition = new Position(0, 200);
867 //simpleWebView.ScrollBy(0, 50);
868 //simpleWebView.ScrollEdgeBy(0, 50);
870 //Log.Info("WebView", $"scroll position is ({simpleWebView.ScrollPosition.X}, {simpleWebView.ScrollPosition.Y}).");
871 //Log.Info("WebView", $"scroll size is ({simpleWebView.ScrollSize.Width}, {simpleWebView.ScrollSize.Height}).");
872 //Log.Info("WebView", $"content size is ({simpleWebView.ContentSize.Width}, {simpleWebView.ContentSize.Height}).");
874 //simpleWebView.StartInspectorServer(8080);
875 //simpleWebView.StopInspectorServer();
876 //simpleWebView.StopLoading();
879 simpleWebView.Settings.LinkMagnifierEnabled = true;
880 Log.Info("WebView", $"web settings LinkMagnifierEnabled is {simpleWebView.Settings.LinkMagnifierEnabled}");
881 simpleWebView.Settings.ViewportMetaTag = true;
882 Log.Info("WebView", $"web settings ViewportMetaTag is {simpleWebView.Settings.ViewportMetaTag}");
883 simpleWebView.Settings.DefaultTextEncodingName = "utf-8";
884 Log.Info("WebView", $"web settings DefaultTextEncodingName is {simpleWebView.Settings.DefaultTextEncodingName}");
885 simpleWebView.Settings.AutomaticImageLoadingAllowed = true;
886 Log.Info("WebView", $"web settings AutomaticImageLoadingAllowed is {simpleWebView.Settings.AutomaticImageLoadingAllowed}");
887 simpleWebView.Settings.ScriptsOpenWindowsAllowed = true;
888 Log.Info("WebView", $"web settings ScriptsOpenWindowsAllowed is {simpleWebView.Settings.ScriptsOpenWindowsAllowed}");
889 simpleWebView.Settings.ImePanelEnabled = true;
890 Log.Info("WebView", $"web settings ImePanelEnabled is {simpleWebView.Settings.ImePanelEnabled}");
891 simpleWebView.Settings.ClipboardEnabled = true;
892 Log.Info("WebView", $"web settings ClipboardEnabled is {simpleWebView.Settings.ClipboardEnabled}");
893 simpleWebView.Settings.ArrowScrollEnabled = true;
894 Log.Info("WebView", $"web settings ArrowScrollEnabled is {simpleWebView.Settings.ArrowScrollEnabled}");
895 simpleWebView.Settings.TextAutosizingEnabled = true;
896 Log.Info("WebView", $"web settings TextAutosizingEnabled is {simpleWebView.Settings.TextAutosizingEnabled}");
897 simpleWebView.Settings.TextSelectionEnabled = true;
898 Log.Info("WebView", $"web settings TextSelectionEnabled is {simpleWebView.Settings.TextSelectionEnabled}");
899 simpleWebView.Settings.FormCandidateDataEnabled = true;
900 Log.Info("WebView", $"web settings FormCandidateDataEnabled is {simpleWebView.Settings.FormCandidateDataEnabled}");
901 simpleWebView.Settings.AutofillPasswordFormEnabled = true;
902 Log.Info("WebView", $"web settings AutofillPasswordFormEnabled is {simpleWebView.Settings.AutofillPasswordFormEnabled}");
903 simpleWebView.Settings.KeypadWithoutUserActionUsed = true;
904 Log.Info("WebView", $"web settings KeypadWithoutUserActionUsed is {simpleWebView.Settings.KeypadWithoutUserActionUsed}");
905 simpleWebView.Settings.ZoomForced = true;
906 Log.Info("WebView", $"web settings ZoomForced is {simpleWebView.Settings.ZoomForced}");
907 simpleWebView.Settings.TextZoomEnabled = true;
908 Log.Info("WebView", $"web settings TextZoomEnabled is {simpleWebView.Settings.TextZoomEnabled}");
909 simpleWebView.Settings.PluginsEnabled = true;
910 Log.Info("WebView", $"web settings PluginsEnabled is {simpleWebView.Settings.PluginsEnabled}");
911 simpleWebView.Settings.AutoFittingEnabled = true;
912 Log.Info("WebView", $"web settings AutoFittingEnabled is {simpleWebView.Settings.AutoFittingEnabled}");
913 simpleWebView.Settings.JavaScriptEnabled = true;
914 Log.Info("WebView", $"web settings JavaScriptEnabled is {simpleWebView.Settings.JavaScriptEnabled}");
915 simpleWebView.Settings.FileAccessFromExternalUrlAllowed = true;
916 Log.Info("WebView", $"web settings FileAccessFromExternalUrlAllowed is {simpleWebView.Settings.FileAccessFromExternalUrlAllowed}");
917 simpleWebView.Settings.ScrollbarThumbFocusNotificationsUsed = true;
918 Log.Info("WebView", $"web settings ScrollbarThumbFocusNotificationsUsed is {simpleWebView.Settings.ScrollbarThumbFocusNotificationsUsed}");
919 simpleWebView.Settings.DoNotTrackEnabled = true;
920 Log.Info("WebView", $"web settings DoNotTrackEnabled is {simpleWebView.Settings.DoNotTrackEnabled}");
921 simpleWebView.Settings.CacheBuilderEnabled = true;
922 Log.Info("WebView", $"web settings CacheBuilderEnabled is {simpleWebView.Settings.CacheBuilderEnabled}");
923 simpleWebView.Settings.WebSecurityEnabled = true;
924 Log.Info("WebView", $"web settings WebSecurityEnabled is {simpleWebView.Settings.WebSecurityEnabled}");
925 simpleWebView.Settings.DefaultFontSize = 20;
926 Log.Info("WebView", $"web settings DefaultFontSize is {simpleWebView.Settings.DefaultFontSize}");
927 simpleWebView.Settings.SpatialNavigationEnabled = true;
928 Log.Info("WebView", $"web settings SpatialNavigationEnabled is {simpleWebView.Settings.SpatialNavigationEnabled}");
929 simpleWebView.Settings.MixedContentsAllowed = true;
930 Log.Info("WebView", $"web settings MixedContentsAllowed is {simpleWebView.Settings.MixedContentsAllowed}");
931 simpleWebView.Settings.PrivateBrowsingEnabled = true;
932 Log.Info("WebView", $"web settings PrivateBrowsingEnabled is {simpleWebView.Settings.PrivateBrowsingEnabled}");
933 simpleWebView.Settings.EnableExtraFeature("feature", true);
934 Log.Info("WebView", $"web settings EnableExtraFeature is {simpleWebView.Settings.IsExtraFeatureEnabled("feature")}");
937 simpleWebView.Context.AppType = WebContext.ApplicationType.WebBrowser;
938 Log.Info("WebView", $"web context, AppType: {simpleWebView.Context.AppType}");
939 simpleWebView.Context.AppVersion = "6.5";
940 Log.Info("WebView", $"web context, AppVersion: {simpleWebView.Context.AppVersion}");
941 simpleWebView.Context.AppId = "1.0id";
942 Log.Info("WebView", $"web context, AppId: {simpleWebView.Context.AppId}");
943 simpleWebView.Context.CacheEnabled = false;
944 Log.Info("WebView", $"web context, CacheEnabled: {simpleWebView.Context.CacheEnabled}");
945 simpleWebView.Context.CertificateFilePath = "/root/share";
946 Log.Info("WebView", $"web context, CertificateFilePath: {simpleWebView.Context.CertificateFilePath}");
947 simpleWebView.Context.ProxyUrl = "https://127.0.0.1";
948 Log.Info("WebView", $"web context, ProxyUrl: {simpleWebView.Context.ProxyUrl}");
949 simpleWebView.Context.CacheModel = WebContext.CacheModelType.DocumentBrowser;
950 Log.Info("WebView", $"web context, cache model is {simpleWebView.Context.CacheModel}");
951 Log.Info("WebView", $"web context, ProxyBypassRule: {simpleWebView.Context.ProxyBypassRule}");
952 simpleWebView.Context.DefaultZoomFactor = 2.0f;
953 Log.Info("WebView", $"web context, DefaultZoomFactor: {simpleWebView.Context.DefaultZoomFactor}");
954 //simpleWebView.Context.ClearCache();
955 //simpleWebView.Context.DeleteAllApplicationCache();
956 //simpleWebView.Context.DeleteAllFormCandidateData();
957 //simpleWebView.Context.DeleteAllFormPasswordData();
958 //simpleWebView.Context.DeleteAllWebDatabase();
959 //simpleWebView.Context.DeleteAllWebIndexedDatabase();
960 //simpleWebView.Context.DeleteAllWebStorage();
961 //simpleWebView.Context.DeleteLocalFileSystem();
962 //simpleWebView.Context.FreeUnusedMemory();
963 Log.Info("WebView", $"web view, here");
964 simpleWebView.Context.GetFormPasswordList(OnPasswordDataListAcquired);
965 Log.Info("WebView", $"web view, here");
966 simpleWebView.Context.GetWebDatabaseOrigins(OnSecurityOriginListAcquired);
967 Log.Info("WebView", $"web view, here");
968 simpleWebView.Context.GetWebStorageOrigins(OnSecurityOriginListAcquired);
969 Log.Info("WebView", $"web view, here");
970 simpleWebView.Context.RegisterDownloadStartedCallback(OnDownloadStarted);
971 Log.Info("WebView", $"web view, here");
972 string[] mimes = { "txt" };
973 simpleWebView.Context.RegisterJsPluginMimeTypes(mimes);
974 Log.Info("WebView", $"web view, here");
975 simpleWebView.Context.RegisterMimeOverriddenCallback(OnMimeOverridden);
976 Log.Info("WebView", $"web view, here");
977 string[] schemes = { "test" };
978 simpleWebView.Context.RegisterUrlSchemesAsCorsEnabled(schemes);
979 Log.Info("WebView", $"web view, here");
980 simpleWebView.Context.SetProxyBypassRule("test", "");
981 Log.Info("WebView", $"web context, ContextProxy: {simpleWebView.Context.ProxyUrl}");
982 simpleWebView.Context.TimeOffset = 8.0f;
983 Log.Info("WebView", $"web context, TimeOffset: {simpleWebView.Context.TimeOffset}");
984 simpleWebView.Context.SetTimeZoneOffset(2.0f, 3.0f);
985 simpleWebView.Context.SetDefaultProxyAuth("user", "password");
987 // webcookiemanager apis
988 simpleWebView.CookieManager.CookieAcceptPolicy = WebCookieManager.CookieAcceptPolicyType.Never;
989 Log.Info("WebView", $"web cookie manager accept policy is {simpleWebView.CookieManager.CookieAcceptPolicy}");
990 //simpleWebView.CookieManager.ClearCookies();
991 simpleWebView.CookieManager.SetPersistentStorage("/root/share", WebCookieManager.CookiePersistentStorageType.SqlLite);
992 simpleWebView.CookieManager.CookieChanged += OnCookieChanged;
994 // webbackforwardlist apis
995 Log.Info("WebView", $"web back forward list item count is {simpleWebView.BackForwardList.ItemCount}");
996 WebBackForwardListItem item = simpleWebView.BackForwardList.GetCurrentItem();
997 Log.Info("WebView", $"web back forward list, current item url is {item.Url}");
998 Log.Info("WebView", $"web back forward list, current item title is {item.Title}");
999 Log.Info("WebView", $"web back forward list, current item original url is {item.OriginalUrl}");
1000 if (simpleWebView.BackForwardList.ItemCount > 0)
1002 item = simpleWebView.BackForwardList.GetItemAtIndex(0);
1003 Log.Info("WebView", $"web back forward list, item0 url is {item.Url}");
1004 Log.Info("WebView", $"web back forward list, item0 title is {item.Title}");
1005 Log.Info("WebView", $"web back forward list, item0 original url is {item.OriginalUrl}");
1006 IList<WebBackForwardListItem> subList = simpleWebView.BackForwardList.GetForwardItems(0);
1007 Log.Info("WebView", $"web back forward list, forward sub list ItemCount is {subList.Count}");
1008 subList = simpleWebView.BackForwardList.GetBackwardItems(0);
1009 Log.Info("WebView", $"web back forward list, backward sub list ItemCount is {subList.Count}");
1021 private bool OnAddressBarTouchEvent(object source, View.TouchEventArgs args)
1023 FocusManager.Instance.SetCurrentFocusView(addressBar);
1027 private void OnTextEditorFocusGained(object source, EventArgs args)
1029 Log.Info("WebView", $"------------address bar focus is gained-------");
1031 addressBar.Text = "";
1033 addressBar.GetInputMethodContext().Activate();
1034 addressBar.GetInputMethodContext().ShowInputPanel();
1037 private void OnTextEditorFocusLost(object source, EventArgs args)
1039 Log.Info("WebView", $"------------address bar focus lost-------");
1042 private bool OnAddressBarKeyEvent(object source, View.KeyEventArgs args)
1044 Log.Info("WebView", $"------------address bar key is {args.Key.KeyPressedName}-------");
1046 if (args.Key.State == Key.StateType.Up)
1048 if (args.Key.KeyPressedName == "Select")
1050 Log.Info("WebView", $"------------address bar text is {addressBar.Text}-------");
1052 if (addressBar.Text.Length > 0)
1054 addressBar.GetInputMethodContext().HideInputPanel();
1055 addressBar.GetInputMethodContext().Deactivate();
1057 simpleWebView.Url = $"http://{addressBar.Text.ToLowerInvariant()}";
1059 // set focus to webview.
1060 FocusManager.Instance.SetCurrentFocusView(simpleWebView);
1063 else if (args.Key.KeyPressedName == "BackSpace")
1065 if (addressBar.Text.Length > 0)
1067 addressBar.Text = addressBar.Text.Substring(0, addressBar.Text.Length - 1);
1070 else if (args.Key.KeyPressedName == "XF86Red")
1072 FocusManager.Instance.SetCurrentFocusView(simpleWebView);
1079 private void Instance_KeyEvent(object sender, Window.KeyEventArgs args)
1081 if (args.Key.State == Key.StateType.Up)
1083 Log.Info("WebView", $"window key is {args.Key.KeyPressedName}.");
1085 if (args.Key.KeyPressedName == "XF86Exit")
1087 if (simpleWebView != null)
1089 GetDefaultWindow().Remove(simpleWebView);
1090 simpleWebView.Dispose();
1091 simpleWebView = null;
1092 Log.Info("WebView", $"WebView is disposed..............");
1099 static void Main(string[] args)
1101 startTime = DateTime.Now.Ticks;
1102 Log.Info("WebView", $"------------web view start time: {startTime}-------");
1103 new SimpleWebViewApplication().Run(args);