2010-03-28 16:56:39 +04:00
|
|
|
/*
|
|
|
|
* Copyright 2005-2007 James Bursa <bursa@users.sourceforge.net>
|
|
|
|
* Copyright 2003 Philip Pemberton <philpem@users.sourceforge.net>
|
|
|
|
*
|
|
|
|
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
|
|
|
*
|
|
|
|
* NetSurf is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; version 2 of the License.
|
|
|
|
*
|
|
|
|
* NetSurf is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2019-05-06 00:46:40 +03:00
|
|
|
/**
|
|
|
|
* \file
|
|
|
|
* Protected interface to Content handling.
|
2010-03-28 16:56:39 +04:00
|
|
|
*
|
|
|
|
* The content functions manipulate struct contents, which correspond to URLs.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _NETSURF_CONTENT_CONTENT_PROTECTED_H_
|
|
|
|
#define _NETSURF_CONTENT_CONTENT_PROTECTED_H_
|
|
|
|
|
2016-04-19 01:04:16 +03:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2016-06-06 10:59:23 +03:00
|
|
|
#include "utils/nsurl.h"
|
|
|
|
#include "netsurf/content_type.h"
|
2010-03-28 16:56:39 +04:00
|
|
|
#include "content/content.h"
|
2016-06-06 10:59:23 +03:00
|
|
|
|
|
|
|
struct content_redraw_data;
|
2016-04-19 01:04:16 +03:00
|
|
|
struct http_parameter;
|
2010-03-28 16:56:39 +04:00
|
|
|
|
2011-05-07 00:40:09 +04:00
|
|
|
struct content_handler {
|
2011-09-16 02:47:50 +04:00
|
|
|
void (*fini)(void);
|
|
|
|
|
2016-06-06 10:59:23 +03:00
|
|
|
nserror (*create)(const struct content_handler *handler,
|
2016-04-19 01:04:16 +03:00
|
|
|
lwc_string *imime_type,
|
|
|
|
const struct http_parameter *params,
|
2016-06-06 10:59:23 +03:00
|
|
|
struct llcache_handle *llcache,
|
2016-04-19 01:04:16 +03:00
|
|
|
const char *fallback_charset, bool quirks,
|
|
|
|
struct content **c);
|
2011-05-07 00:40:09 +04:00
|
|
|
|
|
|
|
bool (*process_data)(struct content *c,
|
|
|
|
const char *data, unsigned int size);
|
2011-05-09 19:32:34 +04:00
|
|
|
bool (*data_complete)(struct content *c);
|
2011-05-07 00:40:09 +04:00
|
|
|
void (*reformat)(struct content *c, int width, int height);
|
|
|
|
void (*destroy)(struct content *c);
|
|
|
|
void (*stop)(struct content *c);
|
|
|
|
void (*mouse_track)(struct content *c, struct browser_window *bw,
|
|
|
|
browser_mouse_state mouse, int x, int y);
|
|
|
|
void (*mouse_action)(struct content *c, struct browser_window *bw,
|
|
|
|
browser_mouse_state mouse, int x, int y);
|
2013-02-22 16:19:35 +04:00
|
|
|
bool (*keypress)(struct content *c, uint32_t key);
|
2011-06-29 00:17:39 +04:00
|
|
|
bool (*redraw)(struct content *c, struct content_redraw_data *data,
|
2011-06-30 19:48:07 +04:00
|
|
|
const struct rect *clip,
|
|
|
|
const struct redraw_context *ctx);
|
2019-07-10 18:42:52 +03:00
|
|
|
nserror (*open)(struct content *c, struct browser_window *bw,
|
2012-08-20 17:22:28 +04:00
|
|
|
struct content *page, struct object_params *params);
|
2019-07-10 18:42:52 +03:00
|
|
|
nserror (*close)(struct content *c);
|
2013-02-22 16:19:35 +04:00
|
|
|
void (*clear_selection)(struct content *c);
|
|
|
|
char * (*get_selection)(struct content *c);
|
2014-11-02 18:46:42 +03:00
|
|
|
nserror (*get_contextual_content)(struct content *c, int x, int y,
|
|
|
|
struct browser_window_features *data);
|
2011-11-29 21:47:29 +04:00
|
|
|
bool (*scroll_at_point)(struct content *c, int x, int y,
|
|
|
|
int scrx, int scry);
|
2011-12-02 01:49:57 +04:00
|
|
|
bool (*drop_file_at_point)(struct content *c, int x, int y,
|
|
|
|
char *file);
|
2014-03-19 02:32:52 +04:00
|
|
|
void (*search)(struct content *c, void *context, search_flags_t flags,
|
|
|
|
const char *string);
|
2013-05-07 17:41:40 +04:00
|
|
|
void (*search_clear)(struct content *c);
|
2014-08-04 03:36:14 +04:00
|
|
|
nserror (*debug_dump)(struct content *c, FILE *f, enum content_debug op);
|
2014-11-07 01:51:46 +03:00
|
|
|
nserror (*debug)(struct content *c, enum content_debug op);
|
2011-05-07 00:40:09 +04:00
|
|
|
nserror (*clone)(const struct content *old, struct content **newc);
|
|
|
|
bool (*matches_quirks)(const struct content *c, bool quirks);
|
2014-11-07 15:33:34 +03:00
|
|
|
const char *(*get_encoding)(const struct content *c, enum content_encoding_type op);
|
2011-09-03 13:27:42 +04:00
|
|
|
content_type (*type)(void);
|
2015-10-31 17:32:22 +03:00
|
|
|
void (*add_user)(struct content *c);
|
|
|
|
void (*remove_user)(struct content *c);
|
2019-05-05 17:37:56 +03:00
|
|
|
bool (*exec)(struct content *c, const char *src, size_t srclen);
|
2011-08-31 16:12:41 +04:00
|
|
|
|
|
|
|
/** handler dependant content sensitive internal data interface. */
|
|
|
|
void * (*get_internal)(const struct content *c, void *context);
|
|
|
|
|
2011-05-07 00:40:09 +04:00
|
|
|
/** There must be one content per user for this type. */
|
|
|
|
bool no_share;
|
|
|
|
};
|
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
/** Linked list of users of a content. */
|
|
|
|
struct content_user
|
|
|
|
{
|
2017-08-26 18:38:18 +03:00
|
|
|
void (*callback)(
|
|
|
|
struct content *c,
|
|
|
|
content_msg msg,
|
|
|
|
const union content_msg_data *data,
|
|
|
|
void *pw);
|
2010-03-28 16:56:39 +04:00
|
|
|
void *pw;
|
|
|
|
|
|
|
|
struct content_user *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
/** Corresponds to a single URL. */
|
|
|
|
struct content {
|
2016-06-06 10:59:23 +03:00
|
|
|
struct llcache_handle *llcache; /**< Low-level cache object */
|
2010-03-28 16:56:39 +04:00
|
|
|
|
2011-05-07 00:40:09 +04:00
|
|
|
lwc_string *mime_type; /**< Original MIME type of data */
|
|
|
|
|
2016-06-06 10:59:23 +03:00
|
|
|
const struct content_handler *handler; /**< Handler for content */
|
2010-03-28 16:56:39 +04:00
|
|
|
|
|
|
|
content_status status; /**< Current status. */
|
|
|
|
|
|
|
|
int width, height; /**< Dimensions, if applicable. */
|
2019-02-17 12:03:19 +03:00
|
|
|
int available_width; /**< Viewport width. */
|
|
|
|
int available_height; /**< Viewport height. */
|
2010-03-28 16:56:39 +04:00
|
|
|
|
|
|
|
bool quirks; /**< Content is in quirks mode */
|
|
|
|
char *fallback_charset; /**< Fallback charset, or NULL */
|
|
|
|
|
2011-10-03 19:56:47 +04:00
|
|
|
nsurl *refresh; /**< URL for refresh request */
|
2010-03-28 16:56:39 +04:00
|
|
|
|
2011-10-07 22:12:47 +04:00
|
|
|
struct content_rfc5988_link *links; /**< list of metadata links */
|
|
|
|
|
2016-04-21 00:58:48 +03:00
|
|
|
/** Creation timestamp when LOADING or READY.
|
|
|
|
* Total time in ms when DONE.
|
|
|
|
*/
|
|
|
|
uint64_t time;
|
2010-03-28 16:56:39 +04:00
|
|
|
|
2016-04-20 21:18:15 +03:00
|
|
|
uint64_t reformat_time; /**< Earliest time to attempt a period
|
|
|
|
* reflow while fetching a page's objects.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
|
|
|
|
unsigned int size; /**< Estimated size of all data
|
2012-10-03 22:24:58 +04:00
|
|
|
associated with this content */
|
2010-03-28 16:56:39 +04:00
|
|
|
char *title; /**< Title for browser window. */
|
|
|
|
unsigned int active; /**< Number of child fetches or
|
|
|
|
conversions currently in progress. */
|
|
|
|
struct content_user *user_list; /**< List of users. */
|
|
|
|
char status_message[120]; /**< Full text for status bar. */
|
|
|
|
char sub_status[80]; /**< Status of content. */
|
|
|
|
/** Content is being processed: data structures may be inconsistent
|
|
|
|
* and content must not be redrawn or modified. */
|
|
|
|
bool locked;
|
|
|
|
|
|
|
|
unsigned long total_size; /**< Total data size, 0 if unknown. */
|
|
|
|
long http_code; /**< HTTP status code, 0 if not HTTP. */
|
|
|
|
|
|
|
|
/** Array of first n rendering errors or warnings. */
|
|
|
|
struct {
|
|
|
|
const char *token;
|
|
|
|
unsigned int line; /**< Line no, 0 if not applicable. */
|
|
|
|
} error_list[40];
|
|
|
|
unsigned int error_count; /**< Number of valid error entries. */
|
|
|
|
};
|
|
|
|
|
|
|
|
extern const char * const content_type_name[];
|
|
|
|
extern const char * const content_status_name[];
|
|
|
|
|
2016-06-06 10:59:23 +03:00
|
|
|
nserror content__init(struct content *c, const struct content_handler *handler,
|
2016-04-19 01:04:16 +03:00
|
|
|
lwc_string *imime_type, const struct http_parameter *params,
|
2011-05-07 00:40:09 +04:00
|
|
|
struct llcache_handle *llcache, const char *fallback_charset,
|
|
|
|
bool quirks);
|
|
|
|
nserror content__clone(const struct content *c, struct content *nc);
|
|
|
|
|
2010-04-09 22:52:44 +04:00
|
|
|
void content_set_ready(struct content *c);
|
2010-03-28 16:56:39 +04:00
|
|
|
void content_set_done(struct content *c);
|
2011-07-21 01:39:51 +04:00
|
|
|
void content_set_error(struct content *c);
|
|
|
|
|
2012-08-15 14:50:08 +04:00
|
|
|
void content_set_status(struct content *c, const char *status_message);
|
2010-03-28 16:56:39 +04:00
|
|
|
void content_broadcast(struct content *c, content_msg msg,
|
2017-08-26 17:50:03 +03:00
|
|
|
const union content_msg_data *data);
|
2012-11-26 20:24:48 +04:00
|
|
|
/**
|
2019-08-05 17:25:15 +03:00
|
|
|
* Send an error message to all users.
|
|
|
|
*
|
|
|
|
* \param c The content whose users should be informed of an error
|
|
|
|
* \param errorcode The nserror code to send
|
|
|
|
* \param msg The error message to send alongside
|
2012-11-26 20:24:48 +04:00
|
|
|
*/
|
2019-08-05 17:25:15 +03:00
|
|
|
void content_broadcast_error(struct content *c, nserror errorcode, const char *msg);
|
2012-11-26 20:24:48 +04:00
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
void content_add_error(struct content *c, const char *token,
|
|
|
|
unsigned int line);
|
|
|
|
|
2011-10-07 22:12:47 +04:00
|
|
|
bool content__add_rfc5988_link(struct content *c,
|
|
|
|
const struct content_rfc5988_link *link);
|
|
|
|
struct content_rfc5988_link *content__free_rfc5988_link(
|
|
|
|
struct content_rfc5988_link *link);
|
|
|
|
|
2011-06-24 13:30:33 +04:00
|
|
|
void content__reformat(struct content *c, bool background,
|
|
|
|
int width, int height);
|
2011-06-28 01:37:37 +04:00
|
|
|
void content__request_redraw(struct content *c,
|
|
|
|
int x, int y, int width, int height);
|
2010-03-28 16:56:39 +04:00
|
|
|
|
|
|
|
|
2014-11-09 01:08:29 +03:00
|
|
|
/**
|
|
|
|
* Retrieve mime-type of content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve mime-type of
|
|
|
|
* \return Pointer to referenced mime-type, or NULL if not found.
|
|
|
|
*/
|
2011-05-07 00:40:09 +04:00
|
|
|
lwc_string *content__get_mime_type(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set title associated with content
|
|
|
|
*
|
|
|
|
* \param c Content to set title on.
|
2014-11-09 15:50:30 +03:00
|
|
|
* \param title The new title to set.
|
2014-11-09 01:08:29 +03:00
|
|
|
* \return true on sucess else false.
|
|
|
|
*/
|
|
|
|
bool content__set_title(struct content *c, const char *title);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve title associated with content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve title from
|
|
|
|
* \return Pointer to title, or NULL if not found.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
const char *content__get_title(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve status message associated with content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve status message from
|
|
|
|
* \return Pointer to status message, or NULL if not found.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
const char *content__get_status_message(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve width of content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve width of
|
|
|
|
* \return Content width
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
int content__get_width(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve height of content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve height of
|
|
|
|
* \return Content height
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
int content__get_height(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve available width of content
|
|
|
|
*
|
|
|
|
* \param c content to get available width of.
|
|
|
|
* \return Available width of content.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
int content__get_available_width(struct content *c);
|
2014-11-09 01:08:29 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve source of content.
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve source of.
|
|
|
|
* \param size Pointer to location to receive byte size of source.
|
|
|
|
* \return Pointer to source data.
|
|
|
|
*/
|
2019-05-06 00:46:40 +03:00
|
|
|
const uint8_t *content__get_source_data(struct content *c, size_t *size);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Invalidate content reuse data.
|
|
|
|
*
|
|
|
|
* causes subsequent requests for content URL to query server to
|
|
|
|
* determine if content can be reused. This is required behaviour for
|
|
|
|
* forced reloads etc.
|
|
|
|
*
|
|
|
|
* \param c Content to invalidate.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
void content__invalidate_reuse_data(struct content *c);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the refresh URL for a content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve refresh URL from
|
|
|
|
* \return Pointer to URL or NULL if none
|
|
|
|
*/
|
2011-10-03 19:56:47 +04:00
|
|
|
nsurl *content__get_refresh_url(struct content *c);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the bitmap contained in an image content
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve opacity from
|
|
|
|
* \return Pointer to bitmap or NULL if none.
|
|
|
|
*/
|
2010-03-28 16:56:39 +04:00
|
|
|
struct bitmap *content__get_bitmap(struct content *c);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Determine if a content is opaque
|
|
|
|
*
|
|
|
|
* \param c Content to retrieve opacity from
|
|
|
|
* \return false if the content is not opaque or information is not
|
|
|
|
* known else true.
|
|
|
|
*/
|
2011-08-31 16:12:41 +04:00
|
|
|
bool content__get_opaque(struct content *c);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the encoding of a content
|
|
|
|
*
|
|
|
|
* \param c the content to examine the encoding of.
|
|
|
|
* \param op encoding operation.
|
|
|
|
* \return Pointer to content info or NULL if none.
|
|
|
|
*/
|
2014-11-07 15:33:34 +03:00
|
|
|
const char *content__get_encoding(struct content *c, enum content_encoding_type op);
|
2014-11-08 19:49:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return whether a content is currently locked
|
|
|
|
*
|
|
|
|
* \param c Content to test
|
|
|
|
* \return true iff locked, else false
|
|
|
|
*/
|
2010-04-07 22:50:18 +04:00
|
|
|
bool content__is_locked(struct content *c);
|
|
|
|
|
2010-03-28 16:56:39 +04:00
|
|
|
#endif
|