Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit a7aaa02

Browse files
committed
[[ BrowserWidget ]] Add libbrowser header & code to xcode project
1 parent c4d7e25 commit a7aaa02

File tree

5 files changed

+2579
-0
lines changed

5 files changed

+2579
-0
lines changed

libbrowser/include/libbrowser.h

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
/* Copyright (C) 2003-2015 Runtime Revolution Ltd.
2+
3+
This file is part of LiveCode.
4+
5+
LiveCode is free software; you can redistribute it and/or modify it under
6+
the terms of the GNU General Public License v3 as published by the Free
7+
Software Foundation.
8+
9+
LiveCode is distributed in the hope that it will be useful, but WITHOUT ANY
10+
WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
for more details.
13+
14+
You should have received a copy of the GNU General Public License
15+
along with LiveCode. If not see <http://www.gnu.org/licenses/>. */
16+
17+
#ifndef __LIBBROWSER_H__
18+
#define __LIBBROWSER_H__
19+
20+
#include "core.h"
21+
22+
// C++ Implementation Class API
23+
24+
class MCBrowserRefCounted
25+
{
26+
public:
27+
MCBrowserRefCounted();
28+
29+
void Retain();
30+
void Release();
31+
32+
virtual void Destroy();
33+
34+
private:
35+
uint32_t m_ref_count;
36+
};
37+
38+
class MCBrowser;
39+
40+
// Event handler interface
41+
class MCBrowserEventHandler : public MCBrowserRefCounted
42+
{
43+
public:
44+
virtual void OnNavigationBegin(MCBrowser *p_browser, bool p_in_frame, const char *p_url) = 0;
45+
virtual void OnNavigationComplete(MCBrowser *p_browser, bool p_in_frame, const char *p_url) = 0;
46+
virtual void OnNavigationFailed(MCBrowser *p_browser, bool p_in_frame, const char *p_url, const char *p_error) = 0;
47+
virtual void OnDocumentLoadBegin(MCBrowser *p_browser, bool p_in_frame, const char *p_url) = 0;
48+
virtual void OnDocumentLoadComplete(MCBrowser *p_browser, bool p_in_frame, const char *p_url) = 0;
49+
virtual void OnDocumentLoadFailed(MCBrowser *p_browser, bool p_in_frame, const char *p_url, const char *p_error) = 0;
50+
};
51+
52+
// Javascript call handler
53+
class MCBrowserJavaScriptHandler : public MCBrowserRefCounted
54+
{
55+
public:
56+
virtual void OnJavaScriptCall(MCBrowser *p_browser, const char *p_handler, uint32_t p_arg_count, const char **p_args) = 0;
57+
};
58+
59+
// Properties
60+
enum MCBrowserProperty
61+
{
62+
// kMCBrowserRect,
63+
// Boolean properties
64+
kMCBrowserScrollbars,
65+
kMCBrowserAllowNewWindows,
66+
kMCBrowserEnableContextMenu,
67+
68+
// String properties
69+
kMCBrowserURL,
70+
kMCBrowserHTMLText,
71+
kMCBrowserUserAgent,
72+
kMCBrowserJavaScriptHandlers,
73+
};
74+
75+
// Convenience struct for rect properties
76+
struct MCBrowserRect
77+
{
78+
int32_t left, top, right, bottom;
79+
};
80+
81+
// Browser interface
82+
class MCBrowser : public MCBrowserRefCounted
83+
{
84+
public:
85+
MCBrowser();
86+
virtual ~MCBrowser() = 0;
87+
88+
void SetEventHandler(MCBrowserEventHandler *p_handler);
89+
void SetJavaScriptHandler(MCBrowserJavaScriptHandler *p_handler);
90+
91+
virtual void *GetNativeLayer() = 0;
92+
93+
virtual bool GetRect(MCBrowserRect &r_rect) = 0;
94+
virtual bool SetRect(const MCBrowserRect &p_rect) = 0;
95+
96+
virtual bool GetBoolProperty(MCBrowserProperty p_property, bool &r_value) = 0;
97+
virtual bool SetBoolProperty(MCBrowserProperty p_property, bool p_value) = 0;
98+
99+
virtual bool GetStringProperty(MCBrowserProperty p_property, char *&r_utf8_string) = 0;
100+
virtual bool SetStringProperty(MCBrowserProperty p_property, const char *p_utf8_string) = 0;
101+
102+
virtual bool GoBack();
103+
virtual bool GoForward();
104+
virtual bool GoToURL(const char *p_url);
105+
virtual bool EvaluateJavaScript(const char *p_script, char *&r_result);
106+
107+
protected:
108+
void OnNavigationBegin(bool p_in_frame, const char *p_url);
109+
void OnNavigationComplete(bool p_in_frame, const char *p_url);
110+
void OnNavigationFailed(bool p_in_frame, const char *p_url, const char *p_error);
111+
void OnDocumentLoadBegin(bool p_in_frame, const char *p_url);
112+
void OnDocumentLoadComplete(bool p_in_frame, const char *p_url);
113+
void OnDocumentLoadFailed(bool p_in_frame, const char *p_url, const char *p_error);
114+
115+
void OnJavaScriptCall(const char *p_handler, uint32_t p_arg_count, const char **p_args);
116+
117+
private:
118+
MCBrowserEventHandler *m_event_handler;
119+
MCBrowserJavaScriptHandler *m_javascript_handler;
120+
};
121+
122+
// Browser factory interface
123+
class MCBrowserFactory : public MCBrowserRefCounted
124+
{
125+
public:
126+
virtual bool CreateBrowser(MCBrowser *&r_browser) = 0;
127+
};
128+
129+
// C API
130+
131+
typedef struct __MCBrowser *MCBrowserRef;
132+
typedef struct __MCBrowserFactory *MCBrowserFactoryRef;
133+
134+
bool MCBrowserFactoryGet(const char *p_factory_id, MCBrowserFactoryRef &r_factory);
135+
bool MCBrowserFactoryCreateBrowser(MCBrowserFactoryRef p_factory, MCBrowserRef &r_browser);
136+
137+
MCBrowserRef MCBrowserRetain(MCBrowserRef p_browser);
138+
void MCBrowserRelease(MCBrowserRef p_browser);
139+
140+
void *MCBrowserGetNativeLayer(MCBrowserRef p_browser);
141+
142+
bool MCBrowserGetRect(MCBrowserRef p_browser, MCBrowserRect &r_rect);
143+
bool MCBrowserSetRect(MCBrowserRef p_browser, const MCBrowserRect &p_rect);
144+
145+
bool MCBrowserGetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool &r_value);
146+
bool MCBrowserSetBoolProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, bool p_value);
147+
148+
bool MCBrowserGetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, char *&r_utf8_string);
149+
bool MCBrowserSetStringProperty(MCBrowserRef p_browser, MCBrowserProperty p_property, const char *p_utf8_string);
150+
151+
bool MCBrowserGoBack(MCBrowserRef p_browser);
152+
bool MCBrowserGoForward(MCBrowserRef p_browser);
153+
bool MCBrowserGoToURL(MCBrowserRef p_browser);
154+
bool MCBrowserEvaluateJavaScript(MCBrowserRef p_browser, const char *p_script, char *&r_result);
155+
156+
enum MCBrowserRequestType
157+
{
158+
kMCBrowserRequestTypeNavigate,
159+
kMCBrowserRequestTypeDocumentLoad,
160+
};
161+
162+
enum MCBrowserRequestState
163+
{
164+
kMCBrowserRequestStateBegin,
165+
kMCBrowserRequestStateComplete,
166+
kMCBrowserRequestStateFailed,
167+
};
168+
169+
typedef void (*MCBrowserRequestCallback)(void *p_context, MCBrowserRef p_browser, MCBrowserRequestType p_type, MCBrowserRequestState p_state, bool p_in_frame, const char *p_url, const char *p_error);
170+
typedef void (*MCBrowserJavaScriptCallback)(void *p_context, MCBrowserRef p_browser, const char *p_handler, uint32_t p_arg_count,const char **p_args);
171+
172+
bool MCBrowserSetRequestHandler(MCBrowserRef p_browser, MCBrowserRequestCallback p_callback, void *p_context);
173+
bool MCBrowserSetJavaScriptHandler(MCBrowserRef p_browser, MCBrowserJavaScriptCallback p_callback, void *p_context);
174+
175+
#endif//__LIBBROWSER_H__
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 46;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
E82CC8691AF2412800E9B8B8 /* libbrowser_cef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82CC8681AF2412800E9B8B8 /* libbrowser_cef.cpp */; };
11+
E82CC86B1AF2413E00E9B8B8 /* libbrowser_cef.h in Headers */ = {isa = PBXBuildFile; fileRef = E82CC86A1AF2413E00E9B8B8 /* libbrowser_cef.h */; };
12+
E8E8DE471AF12C4C00BAA78C /* libbrowser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E8DE241AF1274300BAA78C /* libbrowser.cpp */; };
13+
E8E8DE481AF12C4F00BAA78C /* libbrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = E8E8DE271AF127B400BAA78C /* libbrowser.h */; };
14+
/* End PBXBuildFile section */
15+
16+
/* Begin PBXFileReference section */
17+
E82CC8681AF2412800E9B8B8 /* libbrowser_cef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libbrowser_cef.cpp; sourceTree = "<group>"; };
18+
E82CC86A1AF2413E00E9B8B8 /* libbrowser_cef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libbrowser_cef.h; sourceTree = "<group>"; };
19+
E8E8DE201AF126B000BAA78C /* Global.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = Global.xcconfig; path = ../rules/Global.xcconfig; sourceTree = "<group>"; };
20+
E8E8DE211AF126B000BAA78C /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = ../rules/Release.xcconfig; sourceTree = "<group>"; };
21+
E8E8DE221AF126B000BAA78C /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = ../rules/Debug.xcconfig; sourceTree = "<group>"; };
22+
E8E8DE241AF1274300BAA78C /* libbrowser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = libbrowser.cpp; sourceTree = "<group>"; };
23+
E8E8DE271AF127B400BAA78C /* libbrowser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libbrowser.h; sourceTree = "<group>"; };
24+
E8E8DE431AF12B6F00BAA78C /* libbrowser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libbrowser.a; sourceTree = BUILT_PRODUCTS_DIR; };
25+
/* End PBXFileReference section */
26+
27+
/* Begin PBXFrameworksBuildPhase section */
28+
E8E8DE401AF12B6F00BAA78C /* Frameworks */ = {
29+
isa = PBXFrameworksBuildPhase;
30+
buildActionMask = 2147483647;
31+
files = (
32+
);
33+
runOnlyForDeploymentPostprocessing = 0;
34+
};
35+
/* End PBXFrameworksBuildPhase section */
36+
37+
/* Begin PBXGroup section */
38+
E8E8DE121AF1263800BAA78C = {
39+
isa = PBXGroup;
40+
children = (
41+
E8E8DE261AF1277D00BAA78C /* Headers */,
42+
E8E8DE251AF1274A00BAA78C /* Source */,
43+
E8E8DE231AF126BE00BAA78C /* Configurations */,
44+
E8E8DE281AF12AA300BAA78C /* Products */,
45+
);
46+
sourceTree = "<group>";
47+
};
48+
E8E8DE231AF126BE00BAA78C /* Configurations */ = {
49+
isa = PBXGroup;
50+
children = (
51+
E8E8DE201AF126B000BAA78C /* Global.xcconfig */,
52+
E8E8DE211AF126B000BAA78C /* Release.xcconfig */,
53+
E8E8DE221AF126B000BAA78C /* Debug.xcconfig */,
54+
);
55+
name = Configurations;
56+
sourceTree = "<group>";
57+
};
58+
E8E8DE251AF1274A00BAA78C /* Source */ = {
59+
isa = PBXGroup;
60+
children = (
61+
E8E8DE241AF1274300BAA78C /* libbrowser.cpp */,
62+
E82CC8681AF2412800E9B8B8 /* libbrowser_cef.cpp */,
63+
E82CC86A1AF2413E00E9B8B8 /* libbrowser_cef.h */,
64+
);
65+
name = Source;
66+
path = src;
67+
sourceTree = "<group>";
68+
};
69+
E8E8DE261AF1277D00BAA78C /* Headers */ = {
70+
isa = PBXGroup;
71+
children = (
72+
E8E8DE271AF127B400BAA78C /* libbrowser.h */,
73+
);
74+
name = Headers;
75+
path = include;
76+
sourceTree = "<group>";
77+
};
78+
E8E8DE281AF12AA300BAA78C /* Products */ = {
79+
isa = PBXGroup;
80+
children = (
81+
E8E8DE431AF12B6F00BAA78C /* libbrowser.a */,
82+
);
83+
name = Products;
84+
sourceTree = "<group>";
85+
};
86+
/* End PBXGroup section */
87+
88+
/* Begin PBXHeadersBuildPhase section */
89+
E8E8DE411AF12B6F00BAA78C /* Headers */ = {
90+
isa = PBXHeadersBuildPhase;
91+
buildActionMask = 2147483647;
92+
files = (
93+
E82CC86B1AF2413E00E9B8B8 /* libbrowser_cef.h in Headers */,
94+
E8E8DE481AF12C4F00BAA78C /* libbrowser.h in Headers */,
95+
);
96+
runOnlyForDeploymentPostprocessing = 0;
97+
};
98+
/* End PBXHeadersBuildPhase section */
99+
100+
/* Begin PBXNativeTarget section */
101+
E8E8DE421AF12B6F00BAA78C /* browser */ = {
102+
isa = PBXNativeTarget;
103+
buildConfigurationList = E8E8DE441AF12B6F00BAA78C /* Build configuration list for PBXNativeTarget "browser" */;
104+
buildPhases = (
105+
E8E8DE3F1AF12B6F00BAA78C /* Sources */,
106+
E8E8DE401AF12B6F00BAA78C /* Frameworks */,
107+
E8E8DE411AF12B6F00BAA78C /* Headers */,
108+
);
109+
buildRules = (
110+
);
111+
dependencies = (
112+
);
113+
name = browser;
114+
productName = libbrowser;
115+
productReference = E8E8DE431AF12B6F00BAA78C /* libbrowser.a */;
116+
productType = "com.apple.product-type.library.static";
117+
};
118+
/* End PBXNativeTarget section */
119+
120+
/* Begin PBXProject section */
121+
E8E8DE131AF1263800BAA78C /* Project object */ = {
122+
isa = PBXProject;
123+
attributes = {
124+
LastUpgradeCheck = 0620;
125+
TargetAttributes = {
126+
E8E8DE421AF12B6F00BAA78C = {
127+
CreatedOnToolsVersion = 6.2;
128+
};
129+
};
130+
};
131+
buildConfigurationList = E8E8DE161AF1263800BAA78C /* Build configuration list for PBXProject "libbrowser" */;
132+
compatibilityVersion = "Xcode 3.2";
133+
developmentRegion = English;
134+
hasScannedForEncodings = 0;
135+
knownRegions = (
136+
en,
137+
);
138+
mainGroup = E8E8DE121AF1263800BAA78C;
139+
projectDirPath = "";
140+
projectRoot = "";
141+
targets = (
142+
E8E8DE421AF12B6F00BAA78C /* browser */,
143+
);
144+
};
145+
/* End PBXProject section */
146+
147+
/* Begin PBXSourcesBuildPhase section */
148+
E8E8DE3F1AF12B6F00BAA78C /* Sources */ = {
149+
isa = PBXSourcesBuildPhase;
150+
buildActionMask = 2147483647;
151+
files = (
152+
E8E8DE471AF12C4C00BAA78C /* libbrowser.cpp in Sources */,
153+
E82CC8691AF2412800E9B8B8 /* libbrowser_cef.cpp in Sources */,
154+
);
155+
runOnlyForDeploymentPostprocessing = 0;
156+
};
157+
/* End PBXSourcesBuildPhase section */
158+
159+
/* Begin XCBuildConfiguration section */
160+
E8E8DE171AF1263800BAA78C /* Debug */ = {
161+
isa = XCBuildConfiguration;
162+
baseConfigurationReference = E8E8DE221AF126B000BAA78C /* Debug.xcconfig */;
163+
buildSettings = {
164+
};
165+
name = Debug;
166+
};
167+
E8E8DE181AF1263800BAA78C /* Release */ = {
168+
isa = XCBuildConfiguration;
169+
baseConfigurationReference = E8E8DE211AF126B000BAA78C /* Release.xcconfig */;
170+
buildSettings = {
171+
};
172+
name = Release;
173+
};
174+
E8E8DE451AF12B6F00BAA78C /* Debug */ = {
175+
isa = XCBuildConfiguration;
176+
buildSettings = {
177+
HEADER_SEARCH_PATHS = (
178+
"$(HEADER_SEARCH_PATHS)",
179+
"$(SOLUTION_DIR)/thirdparty/libcef",
180+
"$(SOLUTION_DIR)/libcore/include",
181+
);
182+
PRODUCT_NAME = browser;
183+
};
184+
name = Debug;
185+
};
186+
E8E8DE461AF12B6F00BAA78C /* Release */ = {
187+
isa = XCBuildConfiguration;
188+
buildSettings = {
189+
HEADER_SEARCH_PATHS = (
190+
"$(HEADER_SEARCH_PATHS)",
191+
"$(SOLUTION_DIR)/thirdparty/libcef",
192+
"$(SOLUTION_DIR)/libcore/include",
193+
);
194+
PRODUCT_NAME = browser;
195+
};
196+
name = Release;
197+
};
198+
/* End XCBuildConfiguration section */
199+
200+
/* Begin XCConfigurationList section */
201+
E8E8DE161AF1263800BAA78C /* Build configuration list for PBXProject "libbrowser" */ = {
202+
isa = XCConfigurationList;
203+
buildConfigurations = (
204+
E8E8DE171AF1263800BAA78C /* Debug */,
205+
E8E8DE181AF1263800BAA78C /* Release */,
206+
);
207+
defaultConfigurationIsVisible = 0;
208+
defaultConfigurationName = Release;
209+
};
210+
E8E8DE441AF12B6F00BAA78C /* Build configuration list for PBXNativeTarget "browser" */ = {
211+
isa = XCConfigurationList;
212+
buildConfigurations = (
213+
E8E8DE451AF12B6F00BAA78C /* Debug */,
214+
E8E8DE461AF12B6F00BAA78C /* Release */,
215+
);
216+
defaultConfigurationIsVisible = 0;
217+
defaultConfigurationName = Release;
218+
};
219+
/* End XCConfigurationList section */
220+
};
221+
rootObject = E8E8DE131AF1263800BAA78C /* Project object */;
222+
}

0 commit comments

Comments
 (0)