Home | History | Annotate | Download | only in common
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Multiply-included message file, no traditional include guard.
      6 #include <string>
      7 #include <vector>
      8 
      9 #include "base/basictypes.h"
     10 #include "base/memory/ref_counted.h"
     11 #include "chrome/common/automation_constants.h"
     12 #include "chrome/common/common_param_traits.h"
     13 #include "chrome/common/content_settings.h"
     14 #include "content/public/common/common_param_traits.h"
     15 #include "content/public/common/page_type.h"
     16 #include "content/public/common/security_style.h"
     17 #include "ipc/ipc_message_macros.h"
     18 #include "ipc/ipc_message_utils.h"
     19 #include "net/base/host_port_pair.h"
     20 #include "net/base/upload_data.h"
     21 #include "net/cert/cert_status_flags.h"
     22 #include "net/url_request/url_request_status.h"
     23 #include "ui/base/window_open_disposition.h"
     24 #include "ui/gfx/rect.h"
     25 #include "url/gurl.h"
     26 
     27 IPC_ENUM_TRAITS(AutomationMsg_NavigationResponseValues)
     28 IPC_ENUM_TRAITS(content::PageType)
     29 
     30 IPC_STRUCT_BEGIN(AutomationMsg_Find_Params)
     31   // The word(s) to find on the page.
     32   IPC_STRUCT_MEMBER(base::string16, search_string)
     33 
     34   // Whether to search forward or backward within the page.
     35   IPC_STRUCT_MEMBER(bool, forward)
     36 
     37   // Whether search should be Case sensitive.
     38   IPC_STRUCT_MEMBER(bool, match_case)
     39 
     40   // Whether this operation is first request (Find) or a follow-up (FindNext).
     41   IPC_STRUCT_MEMBER(bool, find_next)
     42 IPC_STRUCT_END()
     43 
     44 IPC_STRUCT_BEGIN(AutomationURLResponse)
     45   IPC_STRUCT_MEMBER(std::string, mime_type)
     46   IPC_STRUCT_MEMBER(std::string, headers)
     47   IPC_STRUCT_MEMBER(int64, content_length)
     48   IPC_STRUCT_MEMBER(base::Time, last_modified)
     49   IPC_STRUCT_MEMBER(std::string, redirect_url)
     50   IPC_STRUCT_MEMBER(int, redirect_status)
     51   IPC_STRUCT_MEMBER(net::HostPortPair, socket_address)
     52   IPC_STRUCT_MEMBER(uint64, upload_size)
     53 IPC_STRUCT_END()
     54 
     55 #if defined(OS_WIN)
     56 
     57 IPC_STRUCT_BEGIN(ExternalTabSettings)
     58   IPC_STRUCT_MEMBER(HWND, parent)
     59   IPC_STRUCT_MEMBER(gfx::Rect, dimensions)
     60   IPC_STRUCT_MEMBER(unsigned int, style)
     61   IPC_STRUCT_MEMBER(bool, is_incognito)
     62   IPC_STRUCT_MEMBER(bool, load_requests_via_automation)
     63   IPC_STRUCT_MEMBER(bool, handle_top_level_requests)
     64   IPC_STRUCT_MEMBER(GURL, initial_url)
     65   IPC_STRUCT_MEMBER(GURL, referrer)
     66   IPC_STRUCT_MEMBER(bool, infobars_enabled)
     67   IPC_STRUCT_MEMBER(bool, route_all_top_level_navigations)
     68 IPC_STRUCT_END()
     69 
     70 #endif  // defined(OS_WIN)
     71 
     72 IPC_STRUCT_BEGIN(NavigationInfo)
     73   IPC_STRUCT_MEMBER(int, navigation_type)
     74   IPC_STRUCT_MEMBER(int, relative_offset)
     75   IPC_STRUCT_MEMBER(int, navigation_index)
     76   IPC_STRUCT_MEMBER(std::wstring, title)
     77   IPC_STRUCT_MEMBER(GURL, url)
     78   IPC_STRUCT_MEMBER(GURL, referrer)
     79   IPC_STRUCT_MEMBER(content::SecurityStyle, security_style)
     80   IPC_STRUCT_MEMBER(bool, displayed_insecure_content)
     81   IPC_STRUCT_MEMBER(bool, ran_insecure_content)
     82 IPC_STRUCT_END()
     83 
     84 // A stripped down version of ContextMenuParams.
     85 IPC_STRUCT_BEGIN(MiniContextMenuParams)
     86   // The x coordinate for displaying the menu.
     87   IPC_STRUCT_MEMBER(int, screen_x)
     88 
     89   // The y coordinate for displaying the menu.
     90   IPC_STRUCT_MEMBER(int, screen_y)
     91 
     92   // This is the URL of the link that encloses the node the context menu was
     93   // invoked on.
     94   IPC_STRUCT_MEMBER(GURL, link_url)
     95 
     96   // The link URL to be used ONLY for "copy link address". We don't validate
     97   // this field in the frontend process.
     98   IPC_STRUCT_MEMBER(GURL, unfiltered_link_url)
     99 
    100   // This is the source URL for the element that the context menu was
    101   // invoked on.  Example of elements with source URLs are img, audio, and
    102   // video.
    103   IPC_STRUCT_MEMBER(GURL, src_url)
    104 
    105   // This is the URL of the top level page that the context menu was invoked
    106   // on.
    107   IPC_STRUCT_MEMBER(GURL, page_url)
    108 
    109   // This is the absolute keyword search URL including the %s search tag when
    110   // the "Add as search engine..." option is clicked (left empty if not used).
    111   IPC_STRUCT_MEMBER(GURL, keyword_url)
    112 
    113   // This is the URL of the subframe that the context menu was invoked on.
    114   IPC_STRUCT_MEMBER(GURL, frame_url)
    115 IPC_STRUCT_END()
    116 
    117 IPC_STRUCT_BEGIN(AttachExternalTabParams)
    118   IPC_STRUCT_MEMBER(uint64, cookie)
    119   IPC_STRUCT_MEMBER(GURL, url)
    120   IPC_STRUCT_MEMBER(gfx::Rect, dimensions)
    121   IPC_STRUCT_MEMBER(int, disposition)
    122   IPC_STRUCT_MEMBER(bool, user_gesture)
    123   IPC_STRUCT_MEMBER(std::string, profile_name)
    124 IPC_STRUCT_END()
    125 
    126 #if defined(OS_WIN)
    127 
    128 IPC_STRUCT_BEGIN(Reposition_Params)
    129   IPC_STRUCT_MEMBER(HWND, window)
    130   IPC_STRUCT_MEMBER(HWND, window_insert_after)
    131   IPC_STRUCT_MEMBER(int, left)
    132   IPC_STRUCT_MEMBER(int, top)
    133   IPC_STRUCT_MEMBER(int, width)
    134   IPC_STRUCT_MEMBER(int, height)
    135   IPC_STRUCT_MEMBER(int, flags)
    136   IPC_STRUCT_MEMBER(bool, set_parent)
    137   IPC_STRUCT_MEMBER(HWND, parent_window)
    138 IPC_STRUCT_END()
    139 
    140 #endif  // defined(OS_WIN)
    141 
    142 IPC_STRUCT_BEGIN(AutomationURLRequest)
    143   IPC_STRUCT_MEMBER(std::string, url)
    144   IPC_STRUCT_MEMBER(std::string, method)
    145   IPC_STRUCT_MEMBER(std::string, referrer)
    146   IPC_STRUCT_MEMBER(std::string, extra_request_headers)
    147   IPC_STRUCT_MEMBER(scoped_refptr<net::UploadData>, upload_data)
    148   IPC_STRUCT_MEMBER(int, resource_type)  // see webkit/common/resource_type.h
    149   IPC_STRUCT_MEMBER(int, load_flags) // see net/base/load_flags.h
    150 IPC_STRUCT_END()
    151 
    152 // Singly-included section for struct and custom IPC traits.
    153 #ifndef CHROME_COMMON_AUTOMATION_MESSAGES_H_
    154 #define CHROME_COMMON_AUTOMATION_MESSAGES_H_
    155 
    156 // This struct passes information about the context menu in Chrome stored
    157 // as a ui::MenuModel to Chrome Frame.  It is basically a container of
    158 // items that go in the menu.  An item may be a submenu, so the data
    159 // structure may be a tree.
    160 struct ContextMenuModel {
    161   ContextMenuModel();
    162   ~ContextMenuModel();
    163 
    164   // This struct describes one item in the menu.
    165   struct Item {
    166     Item();
    167 
    168     // This is the type of the menu item, using values from the enum
    169     // ui::MenuModel::ItemType (serialized as an int).
    170     int type;
    171 
    172     // This is the command id of the menu item, which will be passed by
    173     // Chrome Frame to Chrome if the item is selected.
    174     int item_id;
    175 
    176     // This the the menu label, if needed.
    177     std::wstring label;
    178 
    179     // These are states of the menu item.
    180     bool checked;
    181     bool enabled;
    182 
    183     // This recursively describes the submenu if type is
    184     // ui::MenuModel::TYPE_SUBMENU.
    185     ContextMenuModel* submenu;
    186   };
    187 
    188   // This is the list of menu items.
    189   std::vector<Item> items;
    190 };
    191 
    192 namespace IPC {
    193 
    194 template <>
    195 struct ParamTraits<ContextMenuModel> {
    196   typedef ContextMenuModel param_type;
    197   static void Write(Message* m, const param_type& p);
    198   static bool Read(const Message* m, PickleIterator* iter, param_type* p);
    199   static void Log(const param_type& p, std::string* l);
    200 };
    201 
    202 template <>
    203 struct ParamTraits<scoped_refptr<net::UploadData> > {
    204   typedef scoped_refptr<net::UploadData> param_type;
    205   static void Write(Message* m, const param_type& p);
    206   static bool Read(const Message* m, PickleIterator* iter, param_type* r);
    207   static void Log(const param_type& p, std::string* l);
    208 };
    209 
    210 template <>
    211 struct ParamTraits<net::URLRequestStatus> {
    212   typedef net::URLRequestStatus param_type;
    213   static void Write(Message* m, const param_type& p);
    214   static bool Read(const Message* m, PickleIterator* iter, param_type* r);
    215   static void Log(const param_type& p, std::string* l);
    216 };
    217 
    218 }  // namespace IPC
    219 
    220 #endif  // CHROME_COMMON_AUTOMATION_MESSAGES_H_
    221 
    222 // Keep this internal message file unchanged to preserve line numbering
    223 // (and hence the dubious __LINE__-based message numberings) across versions.
    224 #include "chrome/common/automation_messages_internal.h"
    225