Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(565)

Unified Diff: win8/metro_driver/chrome_app_view.h

Issue 10875008: Integrate the Windows 8 code into the Chromium tree. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove conflicting OWNERS file. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « win8/metro_driver/OWNERS ('k') | win8/metro_driver/chrome_app_view.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: win8/metro_driver/chrome_app_view.h
diff --git a/win8/metro_driver/chrome_app_view.h b/win8/metro_driver/chrome_app_view.h
new file mode 100644
index 0000000000000000000000000000000000000000..80f309d8d664894fb089612125e78313f5938ace
--- /dev/null
+++ b/win8/metro_driver/chrome_app_view.h
@@ -0,0 +1,177 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_METRO_DRIVER_CHROME_APP_VIEW_H_
+#define CHROME_BROWSER_UI_METRO_DRIVER_CHROME_APP_VIEW_H_
+
+#include <windows.applicationmodel.core.h>
+#include <windows.ui.core.h>
+#include <windows.ui.input.h>
+#include <windows.ui.viewmanagement.h>
+
+#include <list>
+#include <map>
+#include <string>
+#include <utility>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "base/synchronization/lock.h"
+#include "win8/metro_driver/chrome_url_launch_handler.h"
+#include "win8/metro_driver/devices_handler.h"
+#include "win8/metro_driver/metro_dialog_box.h"
+#include "win8/metro_driver/settings_handler.h"
+#include "win8/metro_driver/toast_notification_handler.h"
+
+class ChromeAppView
+ : public mswr::RuntimeClass<winapp::Core::IFrameworkView> {
+ public:
+ ChromeAppView();
+ ~ChromeAppView();
+
+ // IViewProvider overrides.
+ IFACEMETHOD(Initialize)(winapp::Core::ICoreApplicationView* view);
+ IFACEMETHOD(SetWindow)(winui::Core::ICoreWindow* window);
+ IFACEMETHOD(Load)(HSTRING entryPoint);
+ IFACEMETHOD(Run)();
+ IFACEMETHOD(Uninitialize)();
+
+ static LRESULT CALLBACK CoreWindowProc(HWND window, UINT message, WPARAM wp,
+ LPARAM lp);
+
+ HRESULT TileRequestCreateDone(winfoundtn::IAsyncOperation<bool>* async,
+ AsyncStatus status);
+
+ bool osk_visible_notification_received() const {
+ return osk_visible_notification_received_;
+ }
+
+ // Displays the notification.
+ void DisplayNotification(
+ const ToastNotificationHandler::DesktopNotification& notification);
+
+ // Cancels the notification.
+ void CancelNotification(const std::string& notification);
+
+ // Returns true if the notification passed in is valid.
+ bool IsValidNotification(const std::string& notification);
+
+ // Displays a dialog box.
+ void ShowDialogBox(const MetroDialogBox::DialogBoxInfo& dialog_box_info);
+ // Dismisses the dialog box.
+ void DismissDialogBox();
+
+ // Helper function to unsnap the chrome metro app if it is snapped.
+ // Returns S_OK on success.
+ static HRESULT Unsnap();
+
+ // Notification from chrome that a full screen operation is being performed.
+ void SetFullscreen(bool fullscreen);
+
+ private:
+ HRESULT OnActivate(winapp::Core::ICoreApplicationView* view,
+ winapp::Activation::IActivatedEventArgs* args);
+
+ HRESULT OnSizeChanged(winui::Core::ICoreWindow* sender,
+ winui::Core::IWindowSizeChangedEventArgs* args);
+
+ HRESULT OnEdgeGestureCompleted(winui::Input::IEdgeGesture* gesture,
+ winui::Input::IEdgeGestureEventArgs* args);
+
+ HRESULT OnShareDataRequested(
+ winapp::DataTransfer::IDataTransferManager* data_transfer_mgr,
+ winapp::DataTransfer::IDataRequestedEventArgs* event_args);
+
+ HRESULT OnInputPaneVisible(
+ winui::ViewManagement::IInputPane* input_pane,
+ winui::ViewManagement::IInputPaneVisibilityEventArgs* event_args);
+
+ HRESULT OnInputPaneHiding(
+ winui::ViewManagement::IInputPane* input_pane,
+ winui::ViewManagement::IInputPaneVisibilityEventArgs* event_args);
+
+ HRESULT OnPositionChanged(int x, int y);
+
+ void CheckForOSKActivation();
+
+ HRESULT RegisterInputPaneNotifications();
+
+ void HandleInputPaneVisible(const RECT& osk_rect);
+ void HandleInputPaneHidden(const RECT& osk_rect);
+
+ mswr::ComPtr<winui::Core::ICoreWindow> window_;
+ mswr::ComPtr<winapp::Core::ICoreApplicationView> view_;
+ EventRegistrationToken activated_token_;
+ EventRegistrationToken edgeevent_token_;
+ EventRegistrationToken sizechange_token_;
+ EventRegistrationToken share_data_requested_token_;
+ EventRegistrationToken input_pane_visible_token_;
+ EventRegistrationToken input_pane_hiding_token_;
+ EventRegistrationToken app_exit_token_;
+
+ ChromeUrlLaunchHandler url_launch_handler_;
+ metro_driver::DevicesHandler devices_handler_;
+ SettingsHandler settings_handler_;
+ mswr::ComPtr<winui::ViewManagement::IInputPane> input_pane_;
+ mswr::ComPtr<winui::ViewManagement::IApplicationViewStatics> app_view_;
+
+ bool osk_visible_notification_received_;
+
+ // map of notification id to the ToastNotificationHandler instance.
+ typedef std::map<std::string, scoped_ptr<ToastNotificationHandler> >
+ NotificationMap;
+ NotificationMap notification_map_;
+
+ // Synchronizes access to the notification_map_ member.
+ base::Lock notification_lock_;
+
+ // If the OSK covers the input area we scroll the window by the height of the
+ // OSK + an additional offset. This member holds this offset. Set to 0 if the
+ // window was not scrolled.
+ int osk_offset_adjustment_;
+
+ MetroDialogBox dialog_box_;
+};
+
+class ChromeAppViewFactory
+ : public mswr::RuntimeClass<winapp::Core::IFrameworkViewSource> {
+ public:
+ ChromeAppViewFactory(winapp::Core::ICoreApplication* icore_app,
+ LPTHREAD_START_ROUTINE host_main,
+ void* host_context);
+ IFACEMETHOD(CreateView)(winapp::Core::IFrameworkView** view);
+};
+
+// This function is exported by chrome.exe.
+typedef int (__cdecl *BreakpadExceptionHandler)(EXCEPTION_POINTERS* info);
+
+// Global information used across the metro driver.
+struct Globals {
+ LPTHREAD_START_ROUTINE host_main;
+ void* host_context;
+ HWND core_window;
+ // The pair below contains the HWND and a bool which indicates whether the
+ // window was displaced to ensure that the focused region is visible when
+ // the OSK is displayed.
+ std::list<std::pair<HWND, bool> > host_windows;
+ HANDLE host_thread;
+ DWORD main_thread_id;
+ ChromeAppView* view;
+ WNDPROC g_core_proc;
+ string16 navigation_url;
+ string16 search_string;
+ winapp::Activation::ApplicationExecutionState previous_state;
+ winapp::Activation::ActivationKind initial_activation_kind;
+ bool is_initial_activation;
+ // This message loop lives in the app view's thread. Some operations have
+ // to be initiated from that thread, notably spawning file pickers.
+ base::MessageLoopProxy* appview_msg_loop;
+ winapp::Core::ICoreApplicationExit* app_exit;
+ BreakpadExceptionHandler breakpad_exception_handler;
+ string16 metro_command_line_switches;
+};
+
+extern Globals globals;
+
+#endif // CHROME_BROWSER_UI_METRO_DRIVER_CHROME_APP_VIEW_H_
« no previous file with comments | « win8/metro_driver/OWNERS ('k') | win8/metro_driver/chrome_app_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698