1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebContextMenuData_h
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebContextMenuData_h
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebHistoryItem.h"
35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebMenuItemInfo.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebNode.h"
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebPoint.h"
38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebString.h"
39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURL.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebVector.h"
41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#define WEBCONTEXT_MEDIATYPEFILE_DEFINED
432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// This struct is passed to WebViewClient::ShowContextMenu.
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebContextMenuData {
48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    enum MediaType {
49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // No special node is in context.
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaTypeNone,
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // An image node is selected.
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaTypeImage,
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // A video node is selected.
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaTypeVideo,
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // An audio node is selected.
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaTypeAudio,
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        // A file node is selected.
582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        MediaTypeFile,
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // A plugin node is selected.
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        MediaTypePlugin,
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    };
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The type of media the context menu is being invoked on.
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    MediaType mediaType;
64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The x and y position of the mouse pointer (relative to the webview).
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebPoint mousePosition;
67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The absolute URL of the link that is in context.
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURL linkURL;
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The absolute URL of the image/video/audio that is in context.
72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURL srcURL;
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
74692e5dbf12901edacf14812a6fae25462920af42Steve Block    // Whether the image in context has been blocked.
75692e5dbf12901edacf14812a6fae25462920af42Steve Block    bool isImageBlocked;
76692e5dbf12901edacf14812a6fae25462920af42Steve Block
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The absolute URL of the page in context.
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURL pageURL;
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The absolute URL of the subframe in context.
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURL frameURL;
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The encoding for the frame in context.
84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebString frameEncoding;
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
8681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // History state of the subframe in context.
8781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebHistoryItem frameHistoryItem;
8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    enum MediaFlags {
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaNone = 0x0,
91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaInError = 0x1,
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaPaused = 0x2,
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaMuted = 0x4,
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaLoop = 0x8,
95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaCanSave = 0x10,
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        MediaHasAudio = 0x20,
97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        MediaHasVideo = 0x40,
982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        MediaControlRootElement = 0x80,
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        MediaCanPrint = 0x100,
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    };
101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Extra attributes describing media elements.
103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    int mediaFlags;
104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The raw text of the selection in context.
106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebString selectedText;
107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Whether spell checking is enabled.
109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool isSpellCheckingEnabled;
110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The editable (possibily) misspelled word.
112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebString misspelledWord;
113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // If misspelledWord is not empty, holds suggestions from the dictionary.
1152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebVector<WebString> dictionarySuggestions;
1162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Whether context is editable.
118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool isEditable;
119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1205e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    enum CheckableMenuItemFlags {
1215e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        CheckableMenuItemDisabled = 0x0,
1225e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        CheckableMenuItemEnabled = 0x1,
1235e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        CheckableMenuItemChecked = 0x2,
1245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    };
1255e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block
1268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    // Writing direction menu items - values are unions of
1278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    // CheckableMenuItemFlags.
1285e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    // Currently only used on OS X.
1295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    int writingDirectionDefault;
1305e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    int writingDirectionLeftToRight;
1315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    int writingDirectionRightToLeft;
1325e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block
133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    enum EditFlags {
134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanDoNone = 0x0,
135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanUndo = 0x1,
136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanRedo = 0x2,
137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanCut = 0x4,
138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanCopy = 0x8,
139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanPaste = 0x10,
140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanDelete = 0x20,
141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CanSelectAll = 0x40,
142ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        CanTranslate = 0x80,
143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    };
144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Which edit operations are available in the context.
146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    int editFlags;
147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Security information for the context.
149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCString securityInfo;
150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Custom context menu items provided by the WebCore internals.
152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebVector<WebMenuItemInfo> customItems;
1536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // The node that was clicked.
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebNode node;
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    WebContextMenuData()
1586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : mediaType(MediaTypeNone)
1596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , isImageBlocked(false)
1606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , mediaFlags(MediaNone)
1616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , isSpellCheckingEnabled(false)
1626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , isEditable(false)
1636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , writingDirectionDefault(CheckableMenuItemDisabled)
1646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , writingDirectionLeftToRight(CheckableMenuItemEnabled)
1656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , writingDirectionRightToLeft(CheckableMenuItemEnabled)
1666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , editFlags(0) { }
167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block};
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
172