| Index: win8/metro_driver/chrome_app_view_ash.h
|
| diff --git a/win8/metro_driver/chrome_app_view_ash.h b/win8/metro_driver/chrome_app_view_ash.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ffe1d7e203d5fd2efc10c72cba0f28b0541c018f
|
| --- /dev/null
|
| +++ b/win8/metro_driver/chrome_app_view_ash.h
|
| @@ -0,0 +1,262 @@
|
| +// 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 WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_
|
| +#define WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_
|
| +
|
| +#include <stdint.h>
|
| +#include <windows.applicationmodel.core.h>
|
| +#include <windows.ui.core.h>
|
| +#include <windows.ui.input.h>
|
| +#include <windows.ui.viewmanagement.h>
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/strings/string16.h"
|
| +#include "base/threading/thread.h"
|
| +#include "ipc/ipc_listener.h"
|
| +#include "ui/events/event_constants.h"
|
| +#include "win8/metro_driver/direct3d_helper.h"
|
| +#include "win8/metro_driver/ime/ime_popup_observer.h"
|
| +#include "win8/metro_driver/ime/input_source_observer.h"
|
| +#include "win8/metro_driver/ime/text_service_delegate.h"
|
| +
|
| +namespace base {
|
| +class FilePath;
|
| +}
|
| +
|
| +namespace IPC {
|
| +class Listener;
|
| +class ChannelProxy;
|
| +}
|
| +
|
| +namespace metro_driver {
|
| +class InputSource;
|
| +class TextService;
|
| +}
|
| +
|
| +namespace metro_viewer {
|
| +struct CharacterBounds;
|
| +struct UnderlineInfo;
|
| +}
|
| +
|
| +class OpenFilePickerSession;
|
| +class SaveFilePickerSession;
|
| +class FolderPickerSession;
|
| +class FilePickerSessionBase;
|
| +
|
| +struct MetroViewerHostMsg_SaveAsDialogParams;
|
| +
|
| +enum MetroTerminateMethod {
|
| + TERMINATE_USING_KEY_SEQUENCE = 1,
|
| + TERMINATE_USING_PROCESS_EXIT = 2,
|
| +};
|
| +
|
| +class ChromeAppViewAsh
|
| + : public mswr::RuntimeClass<winapp::Core::IFrameworkView>,
|
| + public metro_driver::ImePopupObserver,
|
| + public metro_driver::InputSourceObserver,
|
| + public metro_driver::TextServiceDelegate {
|
| + public:
|
| + ChromeAppViewAsh();
|
| + ~ChromeAppViewAsh() override;
|
| +
|
| + // IViewProvider overrides.
|
| + IFACEMETHOD(Initialize)(winapp::Core::ICoreApplicationView* view) override;
|
| + IFACEMETHOD(SetWindow)(winui::Core::ICoreWindow* window) override;
|
| + IFACEMETHOD(Load)(HSTRING entryPoint) override;
|
| + IFACEMETHOD(Run)() override;
|
| + IFACEMETHOD(Uninitialize)() override;
|
| +
|
| + // Helper function to unsnap the chrome metro app if it is snapped.
|
| + // Returns S_OK on success.
|
| + static HRESULT Unsnap();
|
| +
|
| + void OnActivateDesktop(const base::FilePath& file_path, bool ash_exit);
|
| + void OnOpenURLOnDesktop(const base::FilePath& shortcut,
|
| + const base::string16& url);
|
| + void OnSetCursor(HCURSOR cursor);
|
| + void OnDisplayFileOpenDialog(const base::string16& title,
|
| + const base::string16& filter,
|
| + const base::FilePath& default_path,
|
| + bool allow_multiple_files);
|
| + void OnDisplayFileSaveAsDialog(
|
| + const MetroViewerHostMsg_SaveAsDialogParams& params);
|
| + void OnDisplayFolderPicker(const base::string16& title);
|
| + void OnSetCursorPos(int x, int y);
|
| +
|
| + // This function is invoked when the open file operation completes. The
|
| + // result of the operation is passed in along with the OpenFilePickerSession
|
| + // instance which is deleted after we read the required information from
|
| + // the OpenFilePickerSession class.
|
| + void OnOpenFileCompleted(OpenFilePickerSession* open_file_picker,
|
| + bool success);
|
| +
|
| + // This function is invoked when the save file operation completes. The
|
| + // result of the operation is passed in along with the SaveFilePickerSession
|
| + // instance which is deleted after we read the required information from
|
| + // the SaveFilePickerSession class.
|
| + void OnSaveFileCompleted(SaveFilePickerSession* save_file_picker,
|
| + bool success);
|
| +
|
| + // This function is invoked when the folder picker operation completes. The
|
| + // result of the operation is passed in along with the FolderPickerSession
|
| + // instance which is deleted after we read the required information from
|
| + // the FolderPickerSession class.
|
| + void OnFolderPickerCompleted(FolderPickerSession* folder_picker,
|
| + bool success);
|
| +
|
| + void OnImeCancelComposition();
|
| + void OnImeUpdateTextInputClient(
|
| + const std::vector<int32_t>& input_scopes,
|
| + const std::vector<metro_viewer::CharacterBounds>& character_bounds);
|
| +
|
| + void OnMetroExit(MetroTerminateMethod method);
|
| +
|
| + HWND core_window_hwnd() const { return core_window_hwnd_; }
|
| +
|
| +
|
| + private:
|
| + class PointerInfoHandler;
|
| +
|
| + // ImePopupObserver overrides.
|
| + void OnImePopupChanged(ImePopupObserver::EventType event) override;
|
| +
|
| + // InputSourceObserver overrides.
|
| + void OnInputSourceChanged() override;
|
| +
|
| + // TextServiceDelegate overrides.
|
| + void OnCompositionChanged(
|
| + const base::string16& text,
|
| + int32_t selection_start,
|
| + int32_t selection_end,
|
| + const std::vector<metro_viewer::UnderlineInfo>& underlines) override;
|
| + void OnTextCommitted(const base::string16& text) override;
|
| +
|
| + // Convenience for sending a MetroViewerHostMsg_MouseButton with the specified
|
| + // parameters.
|
| + void SendMouseButton(int x,
|
| + int y,
|
| + int extra,
|
| + ui::EventType event_type,
|
| + uint32_t flags,
|
| + ui::EventFlags changed_button,
|
| + bool is_horizontal_wheel);
|
| +
|
| + // Win8 only generates a mouse press for the initial button that goes down and
|
| + // a release when the last button is released. Any intermediary presses (or
|
| + // releases) do not result in a new press/release event. Instead a move is
|
| + // generated with the winui::Input::PointerUpdateKind identifying what
|
| + // changed. This function generates the necessary intermediary events (as
|
| + // necessary).
|
| + void GenerateMouseEventFromMoveIfNecessary(const PointerInfoHandler& pointer);
|
| +
|
| + HRESULT OnActivate(winapp::Core::ICoreApplicationView* view,
|
| + winapp::Activation::IActivatedEventArgs* args);
|
| +
|
| + HRESULT OnPointerMoved(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IPointerEventArgs* args);
|
| +
|
| + HRESULT OnPointerPressed(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IPointerEventArgs* args);
|
| +
|
| + HRESULT OnPointerReleased(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IPointerEventArgs* args);
|
| +
|
| + HRESULT OnWheel(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IPointerEventArgs* args);
|
| +
|
| + HRESULT OnKeyDown(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IKeyEventArgs* args);
|
| +
|
| + HRESULT OnKeyUp(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IKeyEventArgs* args);
|
| +
|
| + // Invoked for system keys like Alt, etc.
|
| + HRESULT OnAcceleratorKeyDown(winui::Core::ICoreDispatcher* sender,
|
| + winui::Core::IAcceleratorKeyEventArgs* args);
|
| +
|
| + HRESULT OnCharacterReceived(winui::Core::ICoreWindow* sender,
|
| + winui::Core::ICharacterReceivedEventArgs* args);
|
| +
|
| + HRESULT OnWindowActivated(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IWindowActivatedEventArgs* args);
|
| +
|
| + // Helper to handle search requests received via the search charm in ASH.
|
| + HRESULT HandleSearchRequest(winapp::Activation::IActivatedEventArgs* args);
|
| + // Helper to handle http/https url requests in ASH.
|
| + HRESULT HandleProtocolRequest(winapp::Activation::IActivatedEventArgs* args);
|
| +
|
| + HRESULT OnEdgeGestureCompleted(winui::Input::IEdgeGesture* gesture,
|
| + winui::Input::IEdgeGestureEventArgs* args);
|
| +
|
| + // Tasks posted to the UI thread to initiate the search/url navigation
|
| + // requests.
|
| + void OnSearchRequest(const base::string16& search_string);
|
| + void OnNavigateToUrl(const base::string16& url);
|
| +
|
| + HRESULT OnSizeChanged(winui::Core::ICoreWindow* sender,
|
| + winui::Core::IWindowSizeChangedEventArgs* args);
|
| +
|
| + // This function checks if the Chrome browser channel is initialized. If yes
|
| + // then it goes ahead and starts up the viewer in Chrome OS mode. If not it
|
| + // posts a delayed task and checks again. It does this for a duration of 10
|
| + // seconds and then bails.
|
| + void StartChromeOSMode();
|
| +
|
| + mswr::ComPtr<winui::Core::ICoreWindow> window_;
|
| + mswr::ComPtr<winapp::Core::ICoreApplicationView> view_;
|
| + EventRegistrationToken activated_token_;
|
| + EventRegistrationToken pointermoved_token_;
|
| + EventRegistrationToken pointerpressed_token_;
|
| + EventRegistrationToken pointerreleased_token_;
|
| + EventRegistrationToken wheel_token_;
|
| + EventRegistrationToken keydown_token_;
|
| + EventRegistrationToken keyup_token_;
|
| + EventRegistrationToken character_received_token_;
|
| + EventRegistrationToken accel_keydown_token_;
|
| + EventRegistrationToken accel_keyup_token_;
|
| + EventRegistrationToken window_activated_token_;
|
| + EventRegistrationToken sizechange_token_;
|
| + EventRegistrationToken edgeevent_token_;
|
| +
|
| + // Keep state about which button is currently down, if any, as PointerMoved
|
| + // events do not contain that state, but Ash's MouseEvents need it. Value is
|
| + // as a bitmask of ui::EventFlags.
|
| + uint32_t mouse_down_flags_;
|
| +
|
| + // Set the D3D swap chain and nothing else.
|
| + metro_driver::Direct3DHelper direct3d_helper_;
|
| +
|
| + // The IPC channel IO thread.
|
| + scoped_ptr<base::Thread> io_thread_;
|
| +
|
| + // The channel to Chrome, in particular to the MetroViewerProcessHost.
|
| + scoped_ptr<IPC::ChannelProxy> ui_channel_;
|
| +
|
| + // The actual window behind the view surface.
|
| + HWND core_window_hwnd_;
|
| +
|
| + // UI message loop to allow message passing into this thread.
|
| + base::MessageLoopForUI ui_loop_;
|
| +
|
| + // For IME support.
|
| + scoped_ptr<metro_driver::InputSource> input_source_;
|
| + scoped_ptr<metro_driver::TextService> text_service_;
|
| +
|
| + // The metro device scale factor as reported by the winrt interfaces.
|
| + float metro_dpi_scale_;
|
| + // The win32 dpi scale which is queried via GetDeviceCaps. Please refer to
|
| + // ui/gfx/win/dpi.cc for more information.
|
| + float win32_dpi_scale_;
|
| +
|
| + // The cursor set by the chroem browser process.
|
| + HCURSOR last_cursor_;
|
| +
|
| + // Pointer to the channel listener for the channel between the viewer and
|
| + // the browser.
|
| + IPC::Listener* channel_listener_;
|
| +};
|
| +
|
| +#endif // WIN8_METRO_DRIVER_CHROME_APP_VIEW_ASH_H_
|
|
|