15267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)/*
25267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
35267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *
45267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * modification, are permitted provided that the following conditions are
65267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * met:
75267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *
85267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * in the documentation and/or other materials provided with the
135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * distribution.
145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * contributors may be used to endorse or promote products derived from
165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * this software without specific prior written permission.
175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) *
185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */
305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#ifndef WebContextMenuData_h
325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#define WebContextMenuData_h
335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebPoint.h"
355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebReferrerPolicy.h"
365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebString.h"
375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebURL.h"
385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "../platform/WebVector.h"
395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "WebHistoryItem.h"
405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "WebMenuItemInfo.h"
415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "WebNode.h"
425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#define WEBCONTEXT_MEDIATYPEFILE_DEFINED
445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink {
465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// This struct is passed to WebViewClient::ShowContextMenu.
485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)struct WebContextMenuData {
495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    enum MediaType {
505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // No special node is in context.
515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypeNone,
525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // An image node is selected.
535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypeImage,
545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // A video node is selected.
555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypeVideo,
565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // An audio node is selected.
575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypeAudio,
58323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        // A canvas node is selected.
59323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        MediaTypeCanvas,
605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // A file node is selected.
615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypeFile,
625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        // A plugin node is selected.
635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaTypePlugin,
6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        MediaTypeLast = MediaTypePlugin
655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    };
665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The type of media the context menu is being invoked on.
675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    MediaType mediaType;
685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The x and y position of the mouse pointer (relative to the webview).
705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebPoint mousePosition;
715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The absolute URL of the link that is in context.
735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebURL linkURL;
745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The absolute URL of the image/video/audio that is in context.
765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebURL srcURL;
775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
78e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    // Whether the image in context is a null.
79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    bool hasImageContents;
80e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The absolute URL of the page in context.
825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebURL pageURL;
835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The absolute keyword search URL including the %s search tag when the
855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // "Add as search engine..." option is clicked (left empty if not used).
865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebURL keywordURL;
875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The absolute URL of the subframe in context.
895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebURL frameURL;
905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The encoding for the frame in context.
925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebString frameEncoding;
935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // History state of the subframe in context.
955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebHistoryItem frameHistoryItem;
965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    enum MediaFlags {
985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaNone = 0x0,
995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaInError = 0x1,
1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaPaused = 0x2,
1015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaMuted = 0x4,
1025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaLoop = 0x8,
1035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaCanSave = 0x10,
1045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaHasAudio = 0x20,
105aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        MediaCanToggleControls = 0x40,
1065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaControls = 0x80,
1075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaCanPrint = 0x100,
1085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        MediaCanRotate = 0x200,
1095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    };
1105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Extra attributes describing media elements.
1125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    int mediaFlags;
1135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The raw text of the selection in context.
1155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebString selectedText;
1165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Whether spell checking is enabled.
1185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    bool isSpellCheckingEnabled;
1195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    // Suggested filename for saving file.
121197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebString suggestedFilename;
122197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
1235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The editable (possibily) misspelled word.
1245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebString misspelledWord;
1255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The identifier of the misspelling.
1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    uint32_t misspellingHash;
1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // If misspelledWord is not empty, holds suggestions from the dictionary.
1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebVector<WebString> dictionarySuggestions;
1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Whether context is editable.
1335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    bool isEditable;
1345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    enum CheckableMenuItemFlags {
1365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CheckableMenuItemDisabled = 0x0,
1375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CheckableMenuItemEnabled = 0x1,
1385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CheckableMenuItemChecked = 0x2,
1395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    };
1405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Writing direction menu items - values are unions of
1425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // CheckableMenuItemFlags.
1435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    int writingDirectionDefault;
1445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    int writingDirectionLeftToRight;
1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    int writingDirectionRightToLeft;
1465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    enum EditFlags {
1485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanDoNone = 0x0,
1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanUndo = 0x1,
1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanRedo = 0x2,
1515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanCut = 0x4,
1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanCopy = 0x8,
1535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanPaste = 0x10,
1545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanDelete = 0x20,
1555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanSelectAll = 0x40,
1565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        CanTranslate = 0x80,
1575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    };
1585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Which edit operations are available in the context.
1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    int editFlags;
1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Security information for the context.
1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebCString securityInfo;
1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The referrer policy applicable to this context.
1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebReferrerPolicy referrerPolicy;
1675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Custom context menu items provided by the WebCore internals.
1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebVector<WebMenuItemInfo> customItems;
1705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // The node that was clicked.
1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebNode node;
1735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    WebContextMenuData()
1755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        : mediaType(MediaTypeNone)
176e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        , hasImageContents(true)
1775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , mediaFlags(MediaNone)
1785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , isSpellCheckingEnabled(false)
179197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        , misspellingHash(0)
1805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , isEditable(false)
1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , writingDirectionDefault(CheckableMenuItemDisabled)
1825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , writingDirectionLeftToRight(CheckableMenuItemEnabled)
1835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , writingDirectionRightToLeft(CheckableMenuItemEnabled)
1845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        , editFlags(0) { }
1855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)};
1865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
18751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink
1885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#endif
190